generics - 通用静态方法调用无法在 Java 8 中编译

标签 generics compiler-errors java-8 compiler-bug

长话短说,以下代码无法在 Java 8 中编译,但在 Java 7 中编译和执行良好:

public static void main(final String[] args) {
    final Class instance = null;
    meth(instance); // compiler error here
}

private static <K, T extends Enum<T> & IAliased<K>> void meth(final Class<T> clazz) {

}

在提到的行发生错误,并显示消息:The method meth(Class<T>) in the type AnotherSpike is not applicable for the arguments (Class) .

虽然完全理解这样的代码不是100%类型安全,但我需要在生产代码中进行非常类似的调用Java 8(编译时带有警告,并且在 Java 7 中运行良好)。

有趣的是,上面的代码在以下情况下可以正常编译(有警告,但这没关系):

  1. 如果 & IAliased<K>从方法签名中删除:

    private static <K, T extends Enum<T>> void meth(final Class<T> clazz)
    
  2. 如果 & IAliased<K>替换为 & IAliased签名:

    private static <K, T extends Enum<T> & IAliased> void meth(final Class<T> clazz)
    

以上两个观察结果让我想到,更像是 Java 8 中的编译器错误,而不是对 Java 8 编译器的深思熟虑的增强,尽管我可能误会了。

无论如何,有人可以建议我如何传递 Class 的原始实例吗? meth 具有此类签名的方法没有编译器错误?

预先感谢您的帮助!

最佳答案

这似乎是 IDE 内部编译器中的错误。

使用 Eclipse,我遇到了与您描述的相同的错误。但是,当使用 JDK 编译器时,我仍然只收到警告并且它可以编译。

关于generics - 通用静态方法调用无法在 Java 8 中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488719/

相关文章:

reactjs - react 和 typescript : How to extend generic component props?

compiler-errors - 升级MAMP后无法通过 compass 编译sass

java - 将两个列表组合成一个唯一的列表(基于一定的字段逻辑)

scala - 要求用户在 Scala 的方法中提供 [Type]?

java - 概括一个方法

java - 方法参数的泛型类型

java - 有序流处理元素的状态映射操作是否以确定性方式进行?

swift - Github exyte Macaw-示例快速编译器错误

scala - Scala父类(super class)构造函数中的“Too many arguments”错误,但在REPL中不存在

java - 在 uClinux 上更新 java