2009-08-30 10 views
11

Próbuję zrobić coś takiego w Javie:Czy istnieje sposób, aby znaleźć typ parametru szablonu (ogólne) w Javie?

public static <T> T foo() { 
    return (T) bar(T); 
} 

public static Object bar(Class<?> klaz) { 
    return klaz.newInstance(); 
} 

ale kod nie skompilować, ponieważ nie może zastąpić T dla klasy <>?.
z konkretną klasą, mogę zadzwonić poprzeczkę jak:

bar(ConcreteClass.class); 

Ale sama nie działa T. to znaczy że nie ma czegoś takiego jak T.class

w C#, typeof prac dla obu rodzajów betonu i szablonów. Tak więc, wezwanie do baru byłoby:

bar(typeof(T)); 

Ale nie udało mi się znaleźć czegoś podobnego w Javie.

Czy czegoś brakuje, czy Java nie ma sposobu na uzyskanie typu parametru szablonu? A jeśli Java nie ma obiektu, czy są jakieś obejścia?

Odpowiedz

14

Nie ma sposobu, aby uzyskać typ. Generics języka Java używa typu wymazania, więc nawet java sama nie wie, co T jest w czasie wykonywania.

Jeśli chodzi o obejścia: można zdefiniować foo, aby pobrać parametr typu Class<T>, a następnie użyć go.

Powiązane problemy