完全相同的类的 Java 泛型不兼容类型

标签 java generics

这是我的 Java 代码示例:

package com.company;

public class Main {

    private static class Something<T>{
        public void fun(Class<T> someClass){
            someClass.cast(null);
        }
    }
    private interface Hello{}

    public static void some(Something<? extends Hello> mySomething, Class<? extends Hello> myClass){
        mySomething.fun(myClass);
    }
}

我在 mySomething.fun(myClass) 处收到一个奇怪的错误线:

Required type: Class<? extends com.company.Main.Hello>
Provided: Class<? extends com.company.Main.Hello>

哪些是完全相同的类型...

我在这里错过了什么?

最佳答案

我认为问题在于“必需”和“提供”中的问号可能不同。假设我有两个 Hello 的实现:Hello1Hello2 .我可以打电话:

some(new Something<Hello2>(), Hello1.class);

即履行了some的约定,但您不希望能够调用 new Something<Hello2>().someClass(Hello1.class) .

我相信你需要表达一次约束,通过制作 some通用的:

public static <T extends Hello> void some(Something<T> mySomething, Class<T> myClass)

现在这两个参数适当相关,所以调用 fun已验证。

关于完全相同的类的 Java 泛型不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61768843/

相关文章:

java - 使用 Java 泛型的 Maven 编译错误

java - Tapestry XML 输出

Java:无法返回带有扩展返回类型的参数的泛型集合

generics - 在 Rust 中编写一个将可迭代容器作为参数的通用函数

java - 在没有特征对象的 Scala 中重用 Java 泛型集合

java - 将方法参数从 String 更改为 int 时出错

java - 我们如何检查Android手机中的多个SIM卡

java - Apache Tomcat 启动失败,找不到 SAXParserFactoryImpl

java - Java中什么情况下需要同步数组?

Java 日志记录似乎不适用于 FINE/FINER/FINEST 级别