您當然可以使用包裝器方法向地圖添加元素,並在那裏檢查Integer和Sring。但是,那麼你只會遇到運行時錯誤。我同意你的觀點,限制類型獲得靜態錯誤要好得多。
對於這一點,我真的不使用Integer.class和String.class,但是一個枚舉:
enum Types { String, Integer };
private Map<String, Types> attributeList = new HashMap<String, Types>();
UPDATE:
試想想起來了,還有另外一個(但更復雜)的解決方案,如果你有堅持Class對象:您可以使用假枚舉模式,即使用一組常量(通常使用整數2 ^我)像一個枚舉。所以你可以定義你的Class對象作爲常量。這當然不能保證沒有其他類對象被放入地圖中。這就是爲什麼Joshua Bloch第30項說「使用枚舉而不是int常量」。但然後你可以使用Checker Framework在使用假枚舉檢查您的常量拉一個額外的類型系統:
private HashMap<String, @Fenum("Types") Class> attributeList
= new HashMap<String, @Fenum("Types") Class>();
:
@SuppressWarnings("fenum:assignment.type.incompatible")
public class TypeEnum {
public static final @Fenum("Types") Class INT_CONST = Integer.class;
public static final @Fenum("Types") Class STR_CONST = String.class;
}
然後你就可以與該類型類別的管制定義地圖
當然,您需要將Fenum Checker包含到您的編譯器中。
我剛剛發佈幾乎相同的答案。該方法足夠清晰和靈活。但是你打算如何處理空值? –
null值呢? – DaveFar
我其實正在尋找那樣的東西! Thx - 會考慮到這一點! –