gpt4 book ai didi

Java 泛型 : create a general method operating on parent classes

转载 作者:行者123 更新时间:2023-11-30 03:30:49 25 4
gpt4 key购买 nike

有如下结构

我自己的类(class)

class HERMEntityRelationshipType
class HERMEntityType extends HERMEntityRelationshipType
class HERMRelationshipType extends HERMEntityRelationshipType

从框架生成类。

class DBMEntityRelationshipType extends DBMDataObject
class DBMEntityType extends DBMDataObject
class DBMRelationshipType extends DBMDataObject

我写了两个类似的方法。

private HERMEntityType parseERType(DBMEntityType dbmEntityType) {...}
private HERMRelationshipType parseERType(DBMRelationshipType dbmRelationshipType){...}

但我只想有这样的一种方法:

HERMEntityRelationshipType parseERType(DBMEntityRelationshipType dbmERType){...}

但是在调用该通用方法后,我无法将我的类转换为子类:例如,将 HERMEntityRelationshipType 转换为 HERMEntityType。但是将 DBMDataObject 转换为 DBMEntityRelationshipType 效果很好。所以他们必须比我更聪明地实现这些类(class)。我的 Actor 阵容如下:

HERMEntityType entityType = (HERMEntityType) parseERType((DBMEntityRelationshipType) dataobject);

并导致:线程“main”java.lang.ClassCastException中出现异常:hermtransformation.herm.HERMEntityRelationshipType无法转换为hermtransformation.herm.HERMEntityType

那么将我的父类(super class)转换为子类需要什么?

最佳答案

这里的问题是Java不允许向下转型。您应该创建子类的新对象,而不是返回父类的新对象。

parseERType 方法应该如下所示:

HERMEntityRelationshipType parseERType(DBMEntityRelationshipType   dbmERType){
if(dbmERType.getClass().equals(DBMEntityType.class)) {
return new HERMEntityType(dbmERType);
} else {
return new HERMRelationshipType(dbmERType);
}

}

关于Java 泛型 : create a general method operating on parent classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106556/

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