2013-02-04 132 views
1

使用泛型類型時遇到問題。 IDE告訴我下面的錯誤:使用泛型作爲方法參數

Cannot select from a type variable 

我覺得這裏有類型擦除問題,但我認爲這裏存在一些解決辦法...

我的代碼:

class MyFactory { 
    public Object getByClass(Class<?> clazz) { 
    ..... 
    } 
} 


class<T> MyClass { 
    private Object myObj = MyFactory.getByClass(T.class); // HERE ERROR, `Cannot select from a type variable` 
    ... 
} 

如何解決這個問題?

+0

由於類型擦除,不可能在運行時告訴「T.class」應該引用什麼。 – millimoose

+0

@millimoose'T'的'Type'可能不是'Class'。 –

回答

3

Class對象傳遞給構造函數。

private final Class<T> clazz; 
private Object myObj 
public MyClass(Class<T> clazz, MyFactory myFactory) { 
    this.clazz = clazz; 
    this.myObj = myFactory.getByClass(clazz); 
} 
+1

不應該是這樣的: this.myObj = myFactory.getByClass(clazz); 此外,我不認爲有必要傳遞myFactory實例。 – JeroenWarmerdam

+0

@JeroenWarmerdam對,固定。 –

+0

@JeroenWarmerdam(我的意思是我把'T.class'固定爲'clazz'。在問題中'getByClass'被聲明爲一個實例方法。如果它不是一個實例方法,那麼這將傾向於建議全局狀態)) –

相關問題