我需要能够理解哪种方法(下面列出的)在Java环境中使用会更有用。
我的问题是:我正在创建一个类,我将用它来保存相同类型的多个对象,但是如果我将来要使用它,我希望能够将不同的对象传递给Array2D的另一个实例。它的名称是Array2D,包含名为rows
和columns
的私有实例变量。但是,我想要做的是能够将任何对象(当你实例化它时)传递给这个类,并且能够使用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是这种情况下的方法,请提供一个示例。我对泛型类基本不熟悉并进行设置。谢谢!
答案 0 :(得分:0)
根据我的理解,您希望它对所有类型的对象都是通用的,但是当您实例化它时,它应该只接受声明类型的子类。如果是这种情况,请使用泛型。实例化它之后,它将自动接受已定义类型的子类。
基本上,使用你的第一种方法。然后像这样更改super.start()
:
main