【发布时间】:2015-11-19 11:15:50
【问题描述】:
我有一个界面
public interface MValue extends SomeOtherInterface, Serializable
我在另一个界面中使用它
public interface DomainObject extends Iterable<FieldValueAssociation>, Cloneable, Serializable {
void add(DomainField field, MValue... values);
<T> T get(DomainField field);
}
当我在我设置的其他类中调用它时
subDomain.add(DomainField.ZIP, d.get(DomainField.ZIP));
在 java 7 上这工作正常,但在 java 8 上我得到 java.lang.ClassCastException: java.lang.String cannot be cast to net.blabla.domain.MValue
d.get(DomainField.ZIP)应该返回String,是的,但是不能转换成MValue,不知道为什么?有人可以解释或让我参考一些文档。谢谢。
【问题讨论】:
-
你能展示一个完整的、可编译的(在 Java 7 中)示例吗?
-
@assylias 代码在 Java 7 中完全一样,它也在 Java 8 中编译,我在运行时得到这个,这是一个巨大的 Spring 应用程序,这些类太大了,无法将它们粘贴到这里,那就是为什么我把它总结在这一点上。
-
如果
d.get(DomainField.ZIP返回一个字符串,我看不出你的代码将如何编译,无论是使用Java 7 还是Java 8。这就是为什么我建议你尝试创建一个mcve 来帮助我们理解什么正在发生。您不需要粘贴所有这些类,只需一个显示问题的最小示例即可。 -
您应该修复签名被设计破坏的方法
<T> T get(DomainField field)。它声称能够返回调用者希望的任何类型,这显然是行不通的。
标签: java generics java-8 java-7 classcastexception