2012-12-06 10 views
7

Zasadniczo wręcz przeciwnie of this question. Chcę przekonwertować obiekt klasy Class Classics C++ na obiekt TypeReference <T>.Konwersja z klasy <T> na TypeReference <T>

Próbowałem:

foo(Class<T> valueType) 
{ 
    TypeReference ref = new TypeReference<T>(){}; 
} 

ale to tylko zwraca oznaczenie typu super klasy klasach jest. Próbowałem również:

foo(Class<T> valueType) 
{ 
    TypeReference ref = new TypeReference<valueType>(){}; 
} 

i

foo(Class<T> valueType) 
{ 
    TypeReference ref = new TypeReference<valueType.getRawClass()>(){}; 
} 

ale druga dwa nie skompilować. Jak mam to zrobic?

+0

czy możesz podać, którą klasę przekazujesz jako parametr i czego oczekujesz? – hoaz

Odpowiedz

9

Można zastąpić getType() wrócić typ:

new TypeReference<T>(){ 
    @Override 
    public Type getType() { 
     return valueType; 
    } 
}; 
1

Chcę przekonwertować obiekt Class do obiektu TypeReference.

Możliwe, że można to zrobić, ale nie mogę myśleć o realistycznym problemie, który rozwiązuje. Rozważmy to info z TypeReference javadoc

Ta klasa jest używana do przekazania pełnej informacji rodzajowych typ i uniknąć problemów z typem skasowaniem (które zasadniczo usuwa najbardziej użytecznych odniesień typ z obiektów Runtime klasa).

Moja interpretacja jest to czas tylko byłoby użyć TypeReference zamiast klasy jest gdy potrzebują Państwo więcej informacji na temat rodzaju, że obiekt klasy może dostarczyć. Więc nawet jeśli potrafisz wymyślić, jak dokonać tej konwersji - co zyskałeś? Nie ma sposobu na przywrócenie usuniętych informacji o typie z klasy do TypeReference.

Zawsze gdy mam sytuację, w której potrzebuję TypeReference zamiast Class, tworzę instancję referencyjną typu betonu i przekazuję ten obiekt w czasie wykonywania. Coś jak to (nie może skompilować, ale masz pomysł)

foo(TypeReference<T> refArg) 
{ 
    TypeReference<T> ref = refArg; 
} 

// later on 
object.foo(new TypeReference<List<Set<MyObject>>(){}); 
+2

Pozwala mi oferować wsparcie dla obu metod bez konieczności przepisywania każdej funkcji – Jason

5

Jak inni zwrócili uwagę, może być również źle rozwiązywania problemu. To, co chcesz zunifikować, to w rzeczywistości JavaType, ponieważ to jest to, do czego oba twoje wejścia są konwertowane i to jest to, czego Jackson używa do wszystkiego. A następnie możesz mieć wygodne metody, aby dostać się do JavaType.

Powiązane problemy