Dlaczego standard Java jest Class<T>
?Dlaczego klasa Java jest klasą <T>?
Odpowiedz
tak że generyczne wpisywanych metody mogą być stosowane -
Class<Foo> klass = Foo.class;
Foo f = klass.newInstance();
Foo f = klass.cast(Object);
Tutaj jest dość dobre podsumowanie zalet: http://download.oracle.com/javase/tutorial/extra/generics/literals.html
Jest krótka wzmianka o tym w sekcji Generics wersji 1.5 podręcznika językowego:
Co bardziej zaskakujące, klasa klasy została uogólniona. Literały klas działają teraz jako tokeny typów, dostarczając informacje o czasie wykonywania i czasie kompilacji. Umożliwia to styl fabryk statycznych przykładem metodą getAnnotation w nowym interfejsie AnnotatedElement:
<T extends Annotation> T getAnnotation(Class<T> annotationType);
Jest to metoda rodzajowa. Wywodzi on wartość jego typ parametru T z jego argumentów i zwraca odpowiednią instancję T, jak pokazano w poniższym przykładzie:
Author a = Othello.class.getAnnotation(Author.class);
Przed generycznych, byś miał do oddania wynik dla autora. Też byś nie miał możliwości, aby sprawdzić kompilatora, że rzeczywisty parametr reprezentowany podklasę Adnotacja
Prawdziwym powodem jest podane przez Neil Gafter:
Gdy dodaliśmy rodzajowych Java w JDK5, Zmieniłem klasę java.lang.Class, aby stała się typem ogólnym. Na przykład typ String.class jest teraz klasy < String>. Gilad Bracha ukuł do tego celu określenia tokenów typu . Moim zamiarem było umożliwienie określonego stylu API, , który Joshua Bloch nazywa wzorcem THC, lub heterogenicznym pojemnikiem Typesafe, .
- 1. Dlaczego String jest klasą?
- 2. Ustal, czy klasa Java jest przenośną klasą SE
- 3. niewłaściwa klasa wartości: klasa org.apache.hadoop.io.Text nie jest klasą org.apache.hadoop.io.IntWritable
- 4. Czy null jest klasą w języku Java?
- 5. Różnica między klasą <?> a klasą <Object> w języku Java
- 6. Jaka jest różnica między klasą clazz a klasą <?> clazz w java?
- 7. Co to jest klasa kierowcy? (Java)
- 8. Java Generics - klasa lub klasa <? extends SomeClass>
- 9. Dlaczego klasa String jest ostateczna?
- 10. jsp: param z klasą Java
- 11. klasa << notacja w modułach
- 12. Dlaczego moja klasa nie jest akceptowalna
- 13. Dlaczego klasa StringBuilder jest zamknięta?
- 14. Java 8, dlaczego nie klasa ZonedTime?
- 15. Jaka jest różnica między klasą Class.This a klasą Java w języku Java?
- 16. Klasa zamówienia powinna być klasą abstrakcyjną
- 17. Dlaczego Meta Django jest klasą w starym stylu?
- 18. Dlaczego (?! ^) Jest równoważne (? <! ^)?
- 19. Czy w Java jest klasa okręgu, jak klasa Rectangle
- 20. Klasa importu Java System
- 21. Java rodzajowych - klasa <?> konstruktor argumentem problem
- 22. Dlaczego w każdej platformie C++ jest inna klasa napisów?
- 23. Jak sprawdzić, czy klasa Java jest abstrakcyjna?
- 24. Dlaczego nie mogę utworzyć tablicy z wewnętrzną klasą typu ogólnego?
- 25. Dlaczego moja klasa nie jest ładowana
- 26. Dlaczego klasa System.Random nie jest statyczna?
- 27. Dlaczego klasa losowa nie jest statyczna?
- 28. Dlaczego klasa HttpUtility nie jest rozpoznawana?
- 29. Różnica między rodzicielską klasą a super klasą
- 30. Jaka jest różnica między klasą int.class a klasą Integer.TYPE w języku Java?
Ostrzeżenie dla każdego, kto uważa, że ta odpowiedź jest poprawna, ponieważ została przyjęta: To nie może być poprawne, ponieważ kod się nie kompiluje. 'klass' jest niezainicjowany przed użyciem. –
... (kontynuacja): Zauważ, że kod, który się kompiluje - czyli 'Class klass = Foo.class;' - błaga oryginalne pytanie, ponieważ 'Foo.class' pozornie dostarcza już niezbędnych informacji. Jednak umiejętność posługiwania się rodzajowymi metodami jest poprawną odpowiedzią; to nie jest jasne z podanego tutaj przykładu. –