使用显式类型参数调用静态导入的方法

nan*_*nda 25 java generics

这是我的问题的后续跟进:奇怪的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)


Dón*_*nal 7

没有

如果要在调用泛型静态方法时提供显式类型参数,则必须在方法前面加上类名称,即使该方法是静态导入的.


Tib*_*ssy 5

Java 语法只允许指定 typename 的类型参数。请参阅 JLS https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-MethodInvocation 中的相应部分