Подстановочный знак можно использовать с оператором ‹> в концепции дженериков, представленной в Java 5, используемой для представления неизвестного типа. Дженерики используются для определения класса с членом в обобщенном формате. Если вы хотите предоставить возможность, чтобы при создании объекта пользователь указывал тип члена, вы можете использовать концепцию дженериков. Его можно использовать только для члена экземпляра, его нельзя использовать со статическим членом, потому что память для статики будет выделена только один раз.
Концепция подстановочных знаков введена в дженерики для ограничения неизвестного типа, скажем, у меня есть список с подстановочными знаками, и этот подстановочный знак расширяет класс оболочки Number. Это означает, что список может работать с Integer, Long, Short, Byte, потому что они расширяют класс-оболочку Number, но не со String, поскольку класс String не расширяет класс-оболочку Number.
List<? extends Number> lt = new ArrayList<>();
Приступая к вашей программе, вы использовали неправильный синтаксис, как я уже упоминал, подстановочный знак можно использовать с оператором ‹>.
Мы не можем использовать подстановочные знаки при создании экземпляра класса, как указано ниже:
List<?> lt = new ArrayList<?>();
но мы можем использовать дженерики для предоставления поля неизвестного типа, такого как I, 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<>();
Подстановочный знак как параметр метода -
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;
}
person
RCS
schedule
23.06.2016
?
s. - person Sean Bright   schedule 23.06.2016