[英]Java Generic Classes, how to define constructor for possible Parameter types
我正在嘗試定義一個可用於泛型類型的Java類,但我想為可能的參數類型(如Character)或我可以手動定義的對象類型定義構造函數。
我試圖創建的類稱為:
public class Repeated<T> implements Pict {
private T[][] elements;
private double scale;
public Repeated(T[][] elems) {
elements = elems;
}
}
所以我想添加一個構造函數來添加一個字符數組,並且如果只有T是Type字符則執行特定的操作。 可能嗎? 或者我應該將其設為接口,然后再實現它?
你應該能夠做到這一點:
public Repeated(T[][] elems) {
elements = elems;
boolean isCharacterArrayArray = false;
if (elems != null) {
for (T[] elt : elems) {
if (elt != null && elt.length > 0) {
isCharacterArrayArray = elt[0] instanceof Character;
break;
}
}
}
if (isCharacterArrayArray) {
// received a Character[][]
}
}
但是,由於類型擦除,我認為你不能區分這些調用:
new Repeated((Character[][]) null);
new Repeated((Integer[][]) null);
沒有傳遞某種顯式類參數。
編輯使用類參數,它變得更加簡單:
public Repeated(T[][] elems, Class<T> cls) {
elements = elems;
if (cls.equals(Character.class)) {
// passed a Character[][]
}
}
所以我想添加一個構造函數來添加一個字符數組,並且如果只有T是Type字符則執行特定的操作
聽起來像多態的好例子:
public class RepeatedChars extends Repeated<Character> {
public RepeatedChars(Character[][] chars) {
super(chars);
//do special stuff
}
//other character-specific logic if applicable
}
您甚至可以將此類隱藏為實現細節:
public class Repeated<T> implements Pict {
...
private static class RepeatedChars extends Repeated<Character> {
//see above
}
public static Repeated<Character> makeForChars(Character[][] chars) {
return new RepeatedChars(chars);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.