gpt4 book ai didi

Java:不会编译 - 必须兼容的不兼容类型

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:51 24 4
gpt4 key购买 nike

这段代码无法编译,我不明白为什么。错误在指示的行:

   static <T extends DB> T createModelObjectFromCopy(T fromRow) {
T mo = null;
try {
--> mo = fromRow.getClass().newInstance();
} catch (InstantiationException | IllegalAccessException ex) {
Logger.getLogger(DBTypes.Table.class.getName()).log(Level.SEVERE, null, ex);
}
return Table.initializeFromCopy(mo, fromRow);
}
}

fromRow是一个包装不可变类型的值对象。

从声明中可以清楚地看出 fromRow必须是 T 类型.变量 mo必须是同一类型 T .

为什么反射实例化的新实例不能赋值给mo ?我假设 fromRow.getClass() 返回的类对象是Class<T>newInstance() -应该- 实例化 T 的新实例.

最佳答案

问题是 fromRow.getClass()返回 Class<? extends DB> , 不是 Class<T> : 编译器的知识不足以进行推断。

因为您知道结果将是正确的类型,所以您可以使用强制转换来强制转换。有两种方法可以做到这一点:

Class<T> cl = (Class<T>)fromRow.getClass();
mo = cl.newInstance();

mo = (T)fromRow.getClass().newInstance();

关于Java:不会编译 - 必须兼容的不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25688642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com