用于指定对泛型方法的方法引用的语法
Syntax for specifying a method reference to a generic method
我在“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 - When a generic method is specified as a method reference, its type argument comes after the ::
and before the method name.
2 - In case in which a generic class is specified, the type argument follows the class name and precedes the ::
.
我的查询:-
上面的代码是第一个引用点的例子
谁能给我一个实现第二个引用点的代码示例?
(第二个引用点基本没看懂)
第二个引号只是表示该类型参数属于class。例如:
class MyClass<T>
{
public boolean myGenMeth(T x, T y)
{
boolean result = false;
// ...
return result;
}
}
然后会这样调用:
SomeTest<Integer> mRef = new MyClass<Integer>() :: myGenMeth;
例如
Predicate<List<String>> p = List<String>::isEmpty;
其实我们这里不需要类型参数;类型推断会处理
Predicate<List<String>> p = List::isEmpty;
但在某些情况下类型推断会失败,例如将此方法引用传递给没有足够推理约束的泛型方法时,可能需要指定类型参数。
我在“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 - When a generic method is specified as a method reference, its type argument comes after the
::
and before the method name.2 - In case in which a generic class is specified, the type argument follows the class name and precedes the
::
.
我的查询:-
上面的代码是第一个引用点的例子
谁能给我一个实现第二个引用点的代码示例?
(第二个引用点基本没看懂)
第二个引号只是表示该类型参数属于class。例如:
class MyClass<T>
{
public boolean myGenMeth(T x, T y)
{
boolean result = false;
// ...
return result;
}
}
然后会这样调用:
SomeTest<Integer> mRef = new MyClass<Integer>() :: myGenMeth;
例如
Predicate<List<String>> p = List<String>::isEmpty;
其实我们这里不需要类型参数;类型推断会处理
Predicate<List<String>> p = List::isEmpty;
但在某些情况下类型推断会失败,例如将此方法引用传递给没有足够推理约束的泛型方法时,可能需要指定类型参数。