我有一个带有静态方法的类,如下所示:
public class Foo {
public static <T> T foo() {
// do something
}
}
如果我想致电Foo.foo
并确保返回类型为T
,我可以说Foo.<T>foo()
。如何为方法参考Foo::foo
执行相同的操作?我尝试过Foo::<T>foo
,但这似乎不是有效的语法。
答案 0 :(得分:2)
表单Type::<Arg>name
是一个有效的语法,但你必须在参数中加入一个具体的类型。方法foo()
之外没有类型T
,因此除非您在范围内有另一个Foo::<T>foo
,否则特定表达式T
将无效。
但是,请注意,在大多数情况下,根本不需要指定类型参数。它将从上下文推断:
public class Foo {
public static <T> T foo() {
// do something
return null;
}
// you can specify type arguments
static Supplier<String> S0=Foo::<String>foo;
static Supplier<Integer> I0=Foo::<Integer>foo;
// but there is no need for it:
static Supplier<String> S1=Foo::foo;
static Supplier<Integer> I=Foo::foo;
}
但请注意,像public static <T> T foo()
这样的方法没有任何意义。由于方法实现不可能检测调用者对T
期望的类型,因此它可以返回的唯一值是null
。好吧,如果它只是一个占位符,它可能是有意义的。