Consider the following Employee class and a subclass called Manager-
public class Employee { private String name; public Employee(String name) { this.name = name; } public String getInfo() { return name; } } public class Manager extends Employee { public Manager(String name) { super(name); } }
In another class, I defined two functions as follows:
import java.util.ArrayList; public class WildCardsAndTypeVariables { public static <T extends Employee> void displayInfo(ArrayList<T> employees) { for (int i=0; i<employees.size(); i++) { Employee employee = (Employee) employees.get(i); System.out.println(employee.getInfo()); } } public static void displayInfo2(ArrayList<? extends Employee> employees) { for (int i=0; i<employees.size(); i++) { Employee employee = (Employee) employees.get(i); System.out.println(employee.getInfo()); } } public static void main(String[] args) { Employee e1 = new Employee("John"); Employee e2 = new Employee("Joe"); Employee e3 = new Manager("Joseph"); ArrayList<Employee> employees = new ArrayList<Employee>(); employees.add(e1); employees.add(e2); employees.add(e3); displayInfo(employees); displayInfo2(employees); } }
I get the same output from displayInfo () and displayInfo2 ().
So, looking at this example, what is the difference between wildcards and type variables?
source share