超类或通用类型

时间:2016-02-16 22:10:41

标签: java arrays generics types superclass

我需要能够理解哪种方法(下面列出的)在Java环境中使用会更有用。

我的问题是:我正在创建一个类,我将用它来保存相同类型的多个对象,但是如果我将来要使用它,我希望能够将不同的对象传递给Array2D的另一个实例。它的名称是Array2D,包含名为rowscolumns的私有实例变量。但是,我想要做的是能够将任何对象(当你实例化它时)传递给这个类,并且能够使用Array2D中的方法返回相同的类型。

方法1
使用泛型类型创建Array2D。 https://docs.oracle.com/javase/tutorial/java/generics/types.html

方法2
创建一个可以扩展的超类,直接传递给Array2D。

方法1的示例:

public class Array2D<T> {
    private int rows;
    private int columns;
    private T[] t;

    public Array2D(int rows, int columns) {
        this.rows = rows;
        this.columns = columns;
    }

    public T[] returnSomething() {
        return t;
    }
}

方法2的示例:

Arrayable.java

public class Arrayable {
    //all of my variables for arrayable class
}

Example.java

public class Example extends Arrayable {
    //more stuff
}

Array2D.java

public class Array2D {
    private int rows;
    private int columns;
    private Arrayable[] arrayable;

    public Array2D(Arrayable[] arr) {
        this.arrayable = arr;
    }

    public Arrayable[] returnSomething() {
        return arrayable;
    }
}

Main.java

public class Main {
    public static void main(String args[]) {
        Example ex1 = new Example();
        Example ex2 = new Example();
        Example[] ex3;

        ex3[0] = ex1;
        ex3[1] = ex2;

        Array2D a2d = new Array2D(ex3);
        Example[] finish = a2d.returnSomething();
    }
}

我在方法2中看到的唯一问题是,对于要为Array2D提供的任何类,它必须扩展Arrayable。哦,事实上需要花费两倍的时间。输入??

如果方法1是这种情况下的方法,请提供一个示例。我对泛型类基本不熟悉并进行设置。谢谢!

1 个答案:

答案 0 :(得分:0)

根据我的理解,您希望它对所有类型的对象都是通用的,但是当您实例化它时,它应该只接受声明类型的子类。如果是这种情况,请使用泛型。实例化它之后,它将自动接受已定义类型的子类。

基本上,使用你的第一种方法。然后像这样更改super.start()

main