Java 方法引用参数 对象值未变
在Java中,方法引用是一种简洁的方式来直接引用已经存在的方法。它可以使代码更加简洁、可读性更高,并且提高了代码的复用性。在方法引用中,有一个重要的概念是对象值未变。本文将介绍什么是方法引用、如何使用方法引用以及对象值未变的概念,并通过代码示例进行说明。
方法引用
方法引用是一种直接引用已经存在的方法的方式,它可以简化代码,降低代码的复杂度。在Java中,方法引用可以通过两种方式来实现:静态方法引用和实例方法引用。
静态方法引用
静态方法引用是指引用一个已经存在的静态方法。它的语法是类名::静态方法名
。例如,我们有一个静态方法add
,它接受两个整数并返回它们的和:
public static int add(int a, int b) {
return a + b;
}
我们可以使用静态方法引用来引用这个方法:
IntBinaryOperator operator = MyMath::add;
上述代码中,IntBinaryOperator
是一个函数式接口,它定义了一个接受两个int
类型参数并返回int
类型结果的方法。我们将静态方法引用MyMath::add
赋值给operator
变量,这样就可以通过operator
来引用静态方法add
。
实例方法引用
实例方法引用是指引用一个已经存在的非静态方法。它的语法是对象名::方法名
。例如,我们有一个类Person
,它有一个非静态方法getName
,它返回人的名字:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
我们可以创建一个Person
对象,并使用实例方法引用来引用getName
方法:
Person person = new Person("Alice");
Supplier<String> supplier = person::getName;
上述代码中,Supplier<String>
是一个函数式接口,它定义了一个无参数的方法并返回String
类型结果。我们将实例方法引用person::getName
赋值给supplier
变量,这样就可以通过supplier
来引用实例方法getName
。
对象值未变
在方法引用中,一个重要的概念是对象值未变。当我们引用一个方法时,方法引用的参数是对象的引用,而不是对象的值。这意味着,如果方法引用的参数是一个可变对象,那么在方法引用中修改对象的状态将会影响到原始对象。
让我们通过一个示例来说明这个概念。假设我们有一个可变类Counter
,它有一个实例方法increment
用于增加计数器的值:
public class Counter {
private int count;
public Counter(int count) {
this.count = count;
}
public void increment() {
count++;
}
public int getCount() {
return count;
}
}
现在我们创建一个Counter
对象,并使用实例方法引用来引用increment
方法:
Counter counter = new Counter(0);
Runnable runnable = counter::increment;
上述代码中,Runnable
是一个函数式接口,它定义了一个无参数的方法并返回void
。我们将实例方法引用counter::increment
赋值给runnable
变量,这样就可以通过runnable
来引用实例方法increment
。
如果我们调用runnable.run()
方法两次,会发现counter
的计数器值会增加两次:
runnable.run();
runnable.run();
System.out.println(counter.getCount()); // 输出 2
这是因为在方法引用中,runnable
引用的是counter
对象的increment
方法,而不是对象的值。因此,每次调用runnable.run()
方法时,都会修改counter
对象的状态。
总结
方法引用是一种简洁、可读性高的方式来直接引用