Ale*_* Mi 5 type-safety java-8 method-reference
对特定对象的实例方法的引用的概念是否破坏了 Java 中的类型安全?
根据
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
你可以有一个不实现 Comparator 接口的自定义类比较提供者,并且仍然使用这个类的实例作为方法的第二个参数
Arrays.sort(T[] a, 比较器 c)
当然,ComparisonProvider 的实现必须有一个方法,其签名与 Comparator.compare() 方法完全匹配,但这仍然不是 Comparator 的实例,不是吗?
本质上,Java 8 允许我们使用类的实例,就好像它们正在实现特定的接口一样,而实际上它们不是。
这意味着,我们正在失去 Java 中的类型安全性,对吗?
Java 8 允许我们使用类的实例,就好像它们正在实现特定的接口一样,但实际上它们并非如此
不完全是,它允许您使用某个类实例的单个方法,就好像它正在实现某个功能接口一样。
而且它没有添加 Java 7 中不存在的任何功能 - 它只是为您提供了编写该功能的捷径。
例如,代替:
Arrays.sort(someArray, someInstance::someMethod);
Run Code Online (Sandbox Code Playgroud)
在 Java 7 中你可以使用匿名类实例来编写:
Arrays.sort(someArray, new Comparator<SomeType> () {
public int compare (SomeType one, SomeTypeTwo) {
return someInstance.someMethod(one,two);
}
});
Run Code Online (Sandbox Code Playgroud)
只要实例方法是可访问的(即公共的),您就可以根据需要使用它。
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |