Chciałbym poznać wykorzystanie? w generycznych elementach java. Badając symbol zastępczy T i znak wieloznaczny? , Zastanawiałem się ?, przeszedł przez kilka stron/stron i książek, ale nie udało się go zrozumieć. Stworzyłem więc poniższą klasę, aby zbadać różnice.Jaki jest pożytek z posiadania? w java
import java.util.List;
public class Generics2 {
public <T> void method1(List<T> list){
System.out.println(list);
}
public <T extends Number> void method2(List<T> list){
System.out.println(list);
}
/*public <T super Integer> void method3(List<T> list){
}*///super does not work.
public void method4(List<?> list){
System.out.println(list);
}
public void method5(List<? extends Number> list){
System.out.println(list);
}
public void method6(List<? super Integer> list){
System.out.println(list);
}
public <T> void copy1(List<T> list1, List<T> list2){
//copy elements from list1 to list2
}//It does not span well with copy of one type of elements from list1 to other type elements in list2, where the list elements
//between the two are not same but are related through inheritance.
public <T1,T2> void copy2(List<T1> list1,List<T2> list2){
//copy elements from list1 to list2, right now we do not bother about the exceptions or errors that might generate.
}//Our intention here is not to copy elements with relation between T1 and T2. We intend to explore the differences on T and ?
public void copy3(List<?> list1,List<?> list2){
//copy elements from list1 to list2, right now we do not bother about the exceptions or errors that might generate.
}//Our intention here is not to copy elements with relation between T1 and T2. We intend to explore the differences on T
public <T1 extends Object, T2 extends Object> void copy4(List<T1> list1, List<T2> list2){
//copy elements from list1 to list2
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Tutaj, w jednym przypadku, nie może być kilka scenariuszy brakujące z mojej klasy, więc to, co napisałem jest niepełna, w tym przypadku może ktoś mi pomóc zrealizować kolejne scenariusze. Albo znalazłem? jako nadmiarowe z, z wyjątkiem takich funkcji, jak użycie super-słowa kluczowego i znaków mniejszych w metodzie podpisu wraz z typem zwracanym.
EDYTOWANIE: Zasadniczo moim pytaniem jest poznać przyczyny, cel wprowadzenia? wildcard, gdzie typ ogólny może go zastąpić wszędzie. Nie chodzi o to, jak używać? lub typy T. Oczywiście, znając jego użycie, zapewni pewne sposoby. Na przykład, rzeczy, które wydedukowałem:
- ? czyni kod bardziej czytelnym i mniej łatwym do kodowania w pewnych miejscach miejsc
- Redukuje czasem wzdęcia kodu.
- Możemy użyć superklas, co nie jest możliwe w przypadku typu T.
- Ogranicza dodawanie nowych losowych elementów do listy. Gdzie casting (bez wyjątku klasycast) jest czasem ważny dla typu T.
Czy są jeszcze jakieś?
wniosek do administratora lub moderatora. Trwa to przez jakiś dzień lub dwa, aby je zrozumieć. Proszę, pozwól mi przejść przez każdy link podany dla tego pytania. – smslce
Nie wiem, jak działa usuwanie duplikatów pytań, ale nie spodziewam się, że nastąpi to wkrótce, jeśli w ogóle. – biziclop