簡體   English   中英

Java Generic Classes,如何為可能的Parameter類型定義構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM