Джокер может быть использован с <> оператор в концепции дженерик введенной в Java 5, используется для представления неизвестного типа. Generics используется для определения класса с членом в обобщенном формате. Если вы хотите предоставить объект, который при создании объекта пользователь будет указывать тип члена, тогда вы можете использовать концепцию дженериков. Он может использоваться только для того, чтобы член экземпляра не мог использоваться со статическими причинами. Память для статического элемента будет выделена только один раз.
Подстановочная концепция, введенная в дженериках для ограничения типа unknow, допустим, у меня есть список, который имеет подстановочный знак, и этот подстановочный знак расширяет класс обертки Number. Это означает, что список может работать с Integer, Long, Short, Byte, потому что они расширяют класс обертки Number, но не с String, поскольку класс String не расширяет класс обертки Number.
List<? extends Number> lt = new ArrayList<>();
приходит к вам программу, вы использовали неправильный синтаксис, как я уже упоминал подстановочные можно использовать с <> оператора.
Мы не использовать подстановочные в то время как инстанцировании класс, как упомянуто ниже -
List<?> lt = new ArrayList<?>();
но мы можем использовать дженерики, чтобы обеспечить поле, как неизвестный тип, как я, N, S в сотрудника класс. Это тип мы будем предоставлять при создании объекта класса -
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 в качестве параметра метода -
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);
объявляя локальную переменную в качестве шаблона -
List<?> lt = new ArayList<String>();
List<?> lt = new ArayList<Integer>();
Мы можем использовать подстановочные знаки и дженерики в качестве возвращаемого типа метода. Вот пример воспроизведенных в качестве возвращаемого типа метода -
public T getName(ClassName obj, Key key)
{
return (Type<T>)obj.getType(Key);
}
Вот пример шаблона в качестве возвращаемого типа метода -
List<?> method(List<?> data)
{
return data;
}
Поскольку это недопустимый синтаксис. Я не вижу никаких дженериков, просто '. –
Лучше прочитать подразделы (https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html) подстановочных знаков в общей главе. Вы не можете использовать подстановочные знаки непосредственно для замены типов. Также см. Много примеров, представленных различными источниками в Интернете. –