Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现类型化列表<;某物>;_Java - Fatal编程技术网

Java 实现类型化列表<;某物>;

Java 实现类型化列表<;某物>;,java,Java,为标题道歉,我不太确定它应该是什么 我是Java新手,继承了具有以下模式的代码库: public abstract class BaseThing{...} public class ThingA extends BaseThing{ public List<BaseThing> elements; } public class ThingB extends BaseThing{ public List<BaseThing> elements; }

为标题道歉,我不太确定它应该是什么

我是Java新手,继承了具有以下模式的代码库:

public abstract class BaseThing{...}

public class ThingA extends BaseThing{
    public List<BaseThing> elements;
}

public class ThingB extends BaseThing{
    public List<BaseThing> elements;
}

public class ThingC extends BaseThing{...}

public class ThingD extends BaseThing{...}
公共抽象类基类{…}
公共类ThingA扩展了BaseThing{
公共清单要素;
}
公共类ThingB扩展了BaseThing{
公共清单要素;
}
公共类ThingC扩展了BaseThing{…}
公共类ThingD扩展了BaseThing{…}
我想写一个方法,该方法在具有元素属性的BaseThing(s)上工作,例如ThingA和ThingB

与我想要实现的类似,但是接口用于方法而不是属性。我认为在接口上使用属性是不可能的

我还研究了方法重载,但是它似乎不能很好地扩展,我需要在每次创建新ThingX时添加一个新方法


Java实现这一点的方法是什么?

您可以修改现有的类吗?如果是,那么最明显的选择是为ThingA和ThingB创建一个公共超类,并将您的列表放入该类中。或者创建一个包含
元素的公共超类
,或者使用
getElements()
方法创建一个接口,并让ThingA和ThingB实现该接口。您永远不应该将
抽象
类强制转换为直接操作
抽象
类,这是最极端的代码气味之一,应该会告诉您您做得不对。一个接口或一个通用的具体实现是你应该使用的。只需将你提供的复制为example@OHGODSPIDERS在这个实例中添加额外的层次结构是否比引入接口更好?