Wildcard może być używany z <> operator w koncepcji generyków wprowadzony w Javie 5, używane do reprezentowania nieznany typ. Generics służy do definiowania klasy z elementem w uogólnionym formacie. Jeśli chcesz zapewnić obiekt, który podczas tworzenia obiektu, użytkownik określi typ elementu, możesz użyć pojęcia generics. Można go używać tylko w przypadku, gdy członek instancji nie może być użyty z pamięcią pamięci stałej statycznej, ponieważ statyczny zostanie przydzielony tylko raz.
Koncepcja wieloznacznika wprowadzona w elementach ogólnych w celu ograniczenia typu nieznanego, powiedzmy, że mam listę z symbolem wieloznacznym i tym rozszerzeniem z użyciem symboli wieloznacznych. Oznacza to, że lista może pracować z liczbami całkowitymi, długimi, krótkimi, bajtowymi, ponieważ rozszerzają one klasę opakowującą Number, ale nie zawierają String jako klasy String, która nie rozszerza klasy opakowania Number.
List<? extends Number> lt = new ArrayList<>();
przychodzi do ciebie programu użyłeś złego składnię, jak już wspomniano wieloznaczne mogą być używane z <> operatora.
Mamy nie użycie symboli wieloznacznych podczas tworzenia instancji klasy jak wspomniano poniżej -
List<?> lt = new ArrayList<?>();
ale możemy użyć rodzajowych w celu zapewnienia dziedzinie jako Nieznany typ jak I, N, S w pracownika klasa. To rodzaj podamy podczas tworzenia obiektu klasy -
class Employee<I,N,S>
{
I eid;
N empName;
S empSalary;
}
class Name
{
String firstName;
String middleName;
String lastName;
}
class salary
{
double basic;
float it;
float tds;
double netsal;
}
class CustomId
{
int empId;
String department;
int branchId;
}
main method
------------
Employee<Integer,String,Double> emp = new Employee<>();
Employee<String,Name,Salary> emp2 = new Employee<>();
Employee<CustomId,String,Salary> emp3 = new Employee<>();
Wildcard jako parametr metoda -
public void sortList(List<?> lt)
{
// code to sort the list whether it is integer, String etc
}
call sortList() method
-----------------------
List<String> lt = new List<>();
lt.add("sss");
lt.add("aaa");
sortList(lt);
List<Integer> lt = new List<>();
lt.add(11);
lt.add(12);
sortList(lt);
Deklarowanie zmiennej lokalnej jako zamiennika -
List<?> lt = new ArayList<String>();
List<?> lt = new ArayList<Integer>();
Możemy używać symboli wieloznacznych i generycznych jako metody zwrotu. Oto przykład rodzajowych jak rodzaj powrotnego sposobu -
public T getName(ClassName obj, Key key)
{
return (Type<T>)obj.getType(Key);
}
Oto przykład zamiennika jako typ powrotnego metody -
List<?> method(List<?> data)
{
return data;
}
Ponieważ nie jest to poprawna składnia. Nie widzę żadnych leków generycznych, tylko "?". –
Lepiej przeczytaj podrozdziały (https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html) symboli wieloznacznych w rozdziale ogólnym. Nie można używać symboli wieloznacznych bezpośrednio w celu zastąpienia typów. Zobacz także więcej przykładów dostarczanych przez różne źródła w Internecie. –