2010-06-05 134 views
0

我已經構建了一個通用的數據容器,現在我想根據它們的類型來操作數據。但是,我收到了不兼容的類型警告。我究竟做錯了什麼?Java泛型轉換

Type _Value; 
public void set(Type t) throws Exception { 
    if (_Value instanceof Integer 
    && t instanceof Integer) { 
     _Value = (((Integer) t 
     - _MinValue + getRange()) 
      % getRange()) + _MinValue; 
     } 
     else if (_Value instanceof Boolean 
     && t instanceof Boolean) { 
_Value = t; 
      } 
     else throw new Exception("Invalid type"); 
    } 
+0

顯示如何定義類以及如何構造實例。 – 2010-06-05 12:59:28

回答

2

您沒有遵循Sun的Java編碼標準。變量名稱應以小寫字母開頭。我個人的口味也會失去這種領先的下劃線。如果你必須說明一個變量是一個類成員,使用「this。」。 IDE足夠聰明,可以顯示它們。當您擁有的文本編輯器無法進行文本高亮顯示時,那種用前導下劃線表示類成員變量的古老C++慣例可能是一個好主意,但現在並非如此。

至於你的「instanceof」構造,這違背了每個面向對象的原則。

您不能在容器內部嵌入依賴於類型的操作。我的建議是編寫容器,並將其包含的項目的操作外部化爲Iterator,Functor或某種訪問者。您可以使用泛型類型來指定類型,而不必訴諸於「instanceof」。

這是一個更清潔的設計:沒有「instanceof」和適當的問題分離。

0

如果Type是java.reflect.Type,那麼它永遠不能是一個整數或布爾值。它只是一個對象的接口,用於存放有關類型,類,接口的信息,它們實際上不是該類型,類,接口的對象。你應該得到錯誤,而不是警告。也許你應該使用Object而不是Type,或者你是否想要反思性地做些事情?