这是我的问题的后续跟进:奇怪的Java泛型.
如果我有这样的代码:
Casts.<X, T> cast(iterable[index]);
Run Code Online (Sandbox Code Playgroud)
我可以添加静态导入并执行:
<X, T> cast(iterable[index]);
Run Code Online (Sandbox Code Playgroud)
Eclipse不允许这样做.但是在Eclipse中看到如此多的静态导入错误后,我并不确定.
jdm*_*hal 11
不,你不能:我刚通过一些测试代码证实了这一点.
PS > javac -version
javac 1.6.0_04
Run Code Online (Sandbox Code Playgroud)
Casts.java
public class Casts
{
public static <From, To> To cast(final From object)
{
return (To)object;
}
}
Run Code Online (Sandbox Code Playgroud)
Test.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);
}
}
Run Code Online (Sandbox Code Playgroud)
Java 语法只允许指定 typename 的类型参数。请参阅 JLS https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-MethodInvocation 中的相应部分