2011-09-23 72 views
0

我有更多的.NET背景,所以我在使用Java中需要的通用方法時遇到了一些麻煩。基本上,我有一個基類,稱爲AbstractBase,我的域對象從中繼承(稱爲它們ClassAClassB)。我想寫一個方法,返回給定ID的特定類型AbstractBase。以下是我如何在C#中執行此操作的示例:Java中的通用方法

public T getById<T>(long id) where T : AbstractBase 
{ 
    if (T is ClassA) 
     // find and return object of type ClassA 
    else if (T is ClassB) 
     // find and return object of type ClassB 
    else 
     return null; 
} 

我不認爲我的頭腦完全包裝了Java的泛型。像這樣的事情可能與Java有關嗎?最好的方法是什麼?

+6

哦,你這個可憐的C#的靈魂。類型擦除 - 準備哭泣。 –

+1

@KirkWoll:+1我完全同意。 :'( –

+0

泛型代碼的全部觀點是它是「通用的」,即不依賴於類型 – newacct

回答

7
public <T extends AbstractBase> T getById(long id, Class<T> typeKey) { 
    if (ClassA.class.isAssignableFrom(typeKey)) { 
     // ... 
    } else if (ClassB.class.isAssignableFrom(typeKey)) { 
     // ... 
    } else { 
     // ... 
    } 
} 

,或者如果你想精確匹配的類(而不是成爲一個潛在的子類型):

public <T extends AbstractBase> T getById(long id, Class<T> typeKey) { 
    if (typeKey == ClassA.class) { 
     // ... 
    } else if (typeKey == ClassB.class) { 
     // ... 
    } else { 
     // ... 
    } 
} 
+1

是的,這就是我一直在尋找的。謝謝,克里斯!很快就會接受答案...... –