如何创建一个Abstract类数组,以便将其初始化为特定的非抽象类(java)

时间:2012-08-09 17:51:59

标签: java arrays generics multidimensional-array abstract

我有一个抽象类Agent和一堆扩展它的类,ModAgent,ClassAgent等。

在另一个类Toroid中,我持有一个多维数组(好吧,嵌套数组,这是java),目前类型为Agent [] []。我想要做的是在Toroid的构造函数中获取实现Agent的特定类型的对象,并将该数组声明/初始化为该特定类型的Agent,以便我可以访问ClassAgent中的特定方法未在代理商中声明。任何人都可以告诉我如何解决这个问题吗?

其次,我有一些方法作为列表返回该多维数组的较小部分。与数组一样,当前具有返回类型的代理。有没有办法让返回类型特定于Array所持有的Agent类型?

1 个答案:

答案 0 :(得分:0)

  

我想要做的是在Toroid的构造函数中获取实现Agent的特定类型的对象,并将该数组声明/初始化为该特定类型的Agent

您可以使用类似

的内容
public class Toroid <A extends Agent> {
    private final A[][] agents;

    public Toroid(Class<A> aClass) {
        Class<A[]> aClassArray = (Class<A[]>) Array.newInstance(aClass, 0).getClass();
        agents = (A[][]) Array.newInstance(aClassArray, 100);
  

这样我就可以访问未在代理中声明的ClassAgent中的特定方法。

你做不到,因为A只是一个特工。如果要使用特定方法,则需要转换对象。

  

有没有办法让返回类型特定于Array所持有的Agent类型?

您可以返回A[]