我目前在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> {
}
}
此代码不会运行,而是生成以下异常:
班级通讯。仿制药。GenericTest$Parent不能强制转换为com类。仿制药。GenericTest$ChildEntity(com.generics.GenericTest$Parent和com.generics.GenericTest$ChildEntity位于加载程序“app”)java的未命名模块中。ClassCastException:class com。仿制药。GenericTest$Parent不能强制转换为com类。仿制药。GenericTest$ChildEntity(com.generics.GenericTest$Parent和com.generics.GenericTest$ChildEntity位于加载程序“app”的未命名模块中)
我想知道为什么它失败了,因为我们已经强制要求孩子必须是父母类型。
为什么会有问题?如何解决?
失败的原因与下面一行失败的原因相同:
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面临一个仿制药的问题。我需要返回一个已转换到子级的父级实例。 下面的示例显示了我正在尝试实现的目标。 此代码不运行,而是产生以下异常: 类com.generics.generictest$parent不能强制转换为类com.generics.generictest$childEntity(com.generics.generictest$parent和com.generics.ge
我的错误:- 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中) 表示包和类名。
我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?
从上面的标题来看,目前我遇到了一个问题,即无法从一个模型类转换到另一个模型类。我写的代码有问题吗?请随时向我询问更多信息。非常感谢。 我怀疑: 这种方法“selectTheOldFnException”有一些错误,那就是使用了hibernate,但我不确定这个理论。 REST控制器 使用HIBERNATE-MatchingEngine选择POJO。班 POJO班 例外代码
我有一个父类来处理我所有的自定义异常,父母异常。我希望所有的子异常都有一个方法来向异常添加消息。为了做到这一点,我创建了一个泛型方法,在向其添加消息后返回泛型类型的对象。我在父类方法中使用来添加消息,然后返回,但是由于该方法返回泛型类型,所以我将其转换为泛型类型T。这似乎是可行的,但是给出了警告。我的代码如下: 该行给出的警告是。这种方法似乎确实如预期的那样有效,所以我并不担心,但我想更好地理解为