我在“Java - 初学者指南”
中阅读了以下代码interface SomeTest <T>
{
boolean test(T n, T m);
}
class MyClass
{
static <T> boolean myGenMeth(T x, T y)
{
boolean result = false;
// ...
return result;
}
}
以下声明有效
SomeTest <Integer> mRef = MyClass :: <Integer> myGenMeth;
关于上述代码的解释,提出了两点
1 - 当泛型方法被指定为方法引用时,其类型参数位于
::
之后和方法名称之前。2 - 如果指定了泛型类,则type参数在类名后面,位于
::
之前。
上面的代码是第一个引用点
的示例有人能为我提供一个实现第二个引用点的代码示例吗?
(基本上我不明白第二个引用点)。
答案 0 :(得分:2)
第二个引用点仅表示type参数属于该类。例如:
class MyClass<T>
{
public boolean myGenMeth(T x, T y)
{
boolean result = false;
// ...
return result;
}
}
然后会这样调用:
SomeTest<Integer> mRef = new MyClass<Integer>() :: myGenMeth;
答案 1 :(得分:1)
例如
Predicate<List<String>> p = List<String>::isEmpty;
实际上我们这里不需要类型参数;类型推断将负责
Predicate<List<String>> p = List::isEmpty;
但是在类型推断失败的情况下,例如将此方法引用传递给没有足够推理约束的泛型方法时,可能需要指定类型参数。