使用显式类型参数调用静态导入的方法
这是我在这里的问题的后续:奇怪的Java泛型。
如果我有这样的代码:
Casts.<X, T> cast(iterable[index]);
我可以添加静态导入并执行以下操作吗:
<X, T> cast(iterable[index]);
Eclipse 不允许这样做。但是在 Eclipse 中看到这么多静态导入的错误之后,我就不那么确定了。
这是我在这里的问题的后续:奇怪的Java泛型。
如果我有这样的代码:
Casts.<X, T> cast(iterable[index]);
我可以添加静态导入并执行以下操作吗:
<X, T> cast(iterable[index]);
Eclipse 不允许这样做。但是在 Eclipse 中看到这么多静态导入的错误之后,我就不那么确定了。
不,你不能:我刚刚通过一些测试代码确认了这一点。
PS > javac -version
javac 1.6.0_04
演员阵容.java
public class Casts
{
public static <From, To> To cast(final From object)
{
return (To)object;
}
}
测试.java
import static Casts.cast;
public class Test
{
public static void main(String[] args)
{
final Integer integer = new Integer(5);
// This one compiles fine.
final Number number = Casts.<Integer, Number>cast(integer);
// This one fails compilation:
// PS> javac Test.java
// Test.java:11: illegal start of expression
// final Number number = <Integer, Number>cast(integer);
// ^
// Test.java:11: not a statement
// final Number number = <Integer, Number>cast(integer);
// ^
final String string = <Integer, String>cast(integer);
}
}
如果要在调用泛型静态方法时提供显式类型参数,则必须在方法前面加上类名前缀,即使该方法是静态导入的也是如此。