我目前在Java面临一个仿制药的问题。我需要返回一个已转换到子级的父级实例。
下面的示例显示了我正在尝试实现的目标。
public class GenericTest {
@Test
public void test() {
assertEquals("child", new B().returnParentInstanceAsChild().name());
}
public static class Parent {
public String name() {
return "parent";
}
}
public static abstract class A<Child extends Parent> {
public Child returnParentInstanceAsChild() {
return (Child) new Parent();
}
}
public static class ChildEntity extends Parent {
@Override
public String name() {
return "child";
}
}
public static class B extends A<ChildEntity> {
}
}
此代码不运行,而是产生以下异常:
类com.generics.generictest$parent不能强制转换为类com.generics.generictest$childEntity(com.generics.generictest$parent和com.generics.generictest$childEntity在加载器'app'的未命名模块中)java.lang.classcastException:类com.generics.generictest$parent不能强制转换为类com.generics.generictest$childEntity(com.generics.generictest$childEntity在加载器'app'的未命名模块中)
我想知道为什么它会失败,因为我们已经强制要求子级必须是parent类型。
为什么会出现问题,如何解决问题?
此操作失败的原因与下面一行失败的原因相同:
ChildEntity child = (ChildEntity) new Parent();
在运行时,强制转换将失败,因为父
不是ChildEntity
。
您可能希望使子类负责创建子实例,因此可以使父类方法抽象:
public static abstract class A<T extends Parent> {
public abstract T returnParentInstanceAsChild();
}
public static class B extends A<ChildEntity> {
@Override
public ChildEntity returnParentInstanceAsChild() {
return new ChildEntity();
}
}
我目前在Java中面临泛型的问题。我需要返回一个父实例。 下面的示例显示了我正在努力实现的目标。 此代码不会运行,而是生成以下异常: 班级通讯。仿制药。GenericTest$Parent不能强制转换为com类。仿制药。GenericTest$ChildEntity(com.generics.GenericTest$Parent和com.generics.GenericTest$ChildEnti
我的错误:- java.lang.ClassCastException:类*不能强制转换为类java.io.Serializable(*位于加载程序'app'的未命名模块中;java.io.Serializable位于加载程序'bootstrap'的模块java.base中) 表示包和类名。
我的错误:- java.lang.ClassCastException:类*不能强制转换为类java.io.Serializable(*位于加载程序'app'的未命名模块中;java.io.Serializable位于加载程序'bootstrap'的模块java.base中) 表示包和类名。
我注意到,当其他人遇到这个问题时,那是因为他们试图投射对象。我没有试图投。此外,我试图询问一个对象是否存在于使用Spring Boot存储库的数据表中。出现以下问题: 问题到底是什么? 模型: 存储库: 测试: 如果相关,服务类: 错误信息: Hibernate:选择skillgroup0_。id为id1_7_,skillgroup0_。名称为name2_7_,skillgroup0_。从skil
我试图从生成的源创建一个bean。 每次我尝试运行我的spring boot应用程序时,我都会得到以下错误: 原因:java.lang.ClassCastException:类org.apache.cxf.endpoint.clientImpl无法强制转换为类com.xignite.services.xigniteCurrenciesSOAP(org.apache.cxf.endpoint.cli
问题内容: 我遇到了Java的异常行为,似乎是一个错误。是吗?即使对象不是的实例,也无法将对象强制转换为通用类型(例如)。这是一个例子: 更新 :感谢cletus和Andrzej Doyle的有用答案。因为我只能接受一个,我接受安杰伊·多伊尔的答案,因为它使我一个解决方案,我觉得是不是 太 糟糕。我认为这是在单行代码中初始化小型Map的更好方法。 然后您这样称呼它: 问题答案: 就像cletus所