Compilation Error: Invalid Method Reference

error: incompatible types: invalid method reference. Cannot make a static reference to the non-static method

Quick Answer

You are using a static method reference syntax for an instance method or vice versa. Match the method reference form to the method type.

Why This Happens

Method references have four forms: Class::staticMethod, instance::method, Class::instanceMethod, and Class::new. Using the wrong form causes a compile error. A common mistake is using ClassName::instanceMethod when you need instance::method.

The Problem

List<String> names = List.of("Alice", "Bob");
// String::toLowerCase is instance method, but used as if static
Function<String, String> fn = String::toLowerCase; // This actually works
// But this doesn't:
Consumer<String> printer = System.out::println; // correct
Consumer<String> wrong = PrintStream::println; // error: needs an instance

The Fix

List<String> names = List.of("Alice", "Bob");
// Instance method reference on a specific instance:
Consumer<String> printer = System.out::println;
// Unbound instance method reference (first parameter becomes the receiver):
Function<String, String> lower = String::toLowerCase;

Step-by-Step Fix

  1. 1

    Identify the method reference

    Find the method reference expression (Class::method or instance::method) causing the error.

  2. 2

    Check static vs instance

    Determine if the referenced method is static or an instance method, and use the appropriate syntax.

  3. 3

    Fix the reference form

    Use instance::method for calling on a specific object, Class::instanceMethod for unbound references, or Class::staticMethod for static methods.

Bugsly catches this automatically

Bugsly's AI analyzes this error pattern in real-time, explains what went wrong in plain English, and suggests the exact fix — before your users even report it.

Try Bugsly free