[英]Superclass or Generic Type
我需要能夠理解在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
}
范例.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,請提供示例。 我基本上是泛型類的新手並對其進行設置。 謝謝!
據我了解,您希望它對所有類型的對象都是通用的,但是在實例化它時,它應該只接受聲明類型的子類。 如果是這種情況,請使用泛型。 實例化它之后,它將自動接受已定義類型的子類。
基本上,使用第一種方法。 然后像這樣更改您的main
:
public class Main {
public static void main(String args[]) {
Arrayable[] classArray = {
new SubClass1(),
new SubClass2()
};
Array2D<Arrayable> a2d = new Array2D<>(classArray);
Arrayable[] array = a2d.returnSomething();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.