Raj*_*udi 2 java java-8 method-reference
我阅读了教程“参考特定类型的任意对象的实例方法”。这是链接https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
所以我编写了自己的代码,但无法删除错误。
Arrays.sort(arr, String::compareToIgnoreCase);
是一个合法的声明,但
Consumer m2 =Myclass::doit;
给出了一个错误。如何解决这个错误?对特定类型的任意对象的实例方法的引用的概念是否适用于像 String 这样的 java 内置类?
这是我的代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
interface Myinter {
void doit(List<String> s);
}
public class Myclass implements Myinter {
public static void main(String[] args) {
List<String> obj = new ArrayList<String>();
obj.add("raj");
obj.add("gopal");
obj.add("bhallamudi");
String arr[] = new String[obj.size()];
arr = obj.toArray(arr);
Arrays.sort(arr, String::compareToIgnoreCase);
for (String s : arr)
System.out.println(s + " ");
Consumer<List<String>> m2 =Myclass::doit;
m2.accept(obj);
}
@Override
public void doit(List<String> s) {
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
当您创建对实例方法的未绑定引用时,接收者实例将成为第一个函数参数。
\n\n在 的情况下String::compareToIgnoreCase
,您将有两个字符串参数传递给Comparator.compare
;该方法compareToIgnoreCase
将在第一个方法将第二个方法作为参数传递时被调用。
同样,你必须使用
\n\nBiConsumer<Myclass,List<String>> m2 = Myclass::doit;\nm2.accept(new MyClass(), obj);\n
Run Code Online (Sandbox Code Playgroud)\n\ndoit
因为您可以\xe2\x80\x99t在没有 实例的情况下调用实例方法Myclass
。或者,合并您的界面:
BiConsumer<Myinter,List<String>> m2 = Myinter::doit;\nm2.accept(new MyClass(), obj);\n
Run Code Online (Sandbox Code Playgroud)\n\n在这里,任何类实现的实例Myinter
就足够了。
归档时间: |
|
查看次数: |
1225 次 |
最近记录: |