我特林创建不同类实例的ArrayList。 我怎样才能创建一个没有定义一个类类型的列表? (<Employee>)
List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee());
Employee employee = employees.get(0);
我特林创建不同类实例的ArrayList。 我怎样才能创建一个没有定义一个类类型的列表? (<Employee>)
List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee());
Employee employee = employees.get(0);
你可以创建这样的对象名单List<Object> list = new ArrayList<Object>()
由于所有的类实现扩展从隐性或显性java.lang.Object
类,这个名单可以容纳任何对象,包括实例Employee
, Integer
, String
等。
当您从该列表中检索元素,你将被检索的Object
,并不再是一个Employee
,这意味着你需要在这种情况下进行显式转换,如下所示:
List<Object> list = new ArrayList<Object>();
list.add("String");
list.add(Integer.valueOf(1));
list.add(new Employee());
Object retrievedObject = list.get(2);
Employee employee = (Employee)list.get(2); // explicit cast
List<Object> objects = new ArrayList<Object>();
objects
名单将接受任何的Object
你可以设计类似如下
public class BaseEmployee{/* stuffs */}
public class RegularEmployee extends BaseEmployee{/* stuffs */}
public class Contractors extends BaseEmployee{/* stuffs */}
在列表
List<? extends BaseEmployee> employeeList = new ArrayList<? extends BaseEmployee>();
List anyObject = new ArrayList();
or
List<Object> anyObject = new ArrayList<Object>();
现在anyObject
可以持有objects of any type
。
使用instanceof来知道what kind of object it is
。
如果你不能比更具体Object
与你的情况下,然后使用:
List<Object> employees = new ArrayList<Object>();
否则,越具体,您可以:
List<? extends SpecificType> employees = new ArrayList<? extends SpecificType>();
我相信你最好的拍摄是申报表作为对象的列表:
List<Object> anything = new ArrayList<Object>();
然后,你可以把任何你想要的话,这样的:
anything.add(new Employee(..))
显然,你不能没有正确的铸造读什么出格的名单:
Employee mike = (Employee) anything.get(0);
我不鼓励使用原始类型,如:
List anything = new ArrayList()
由于仿制药的整个目的正是为了避免这些,在未来的Java可能不再询问服务生类型,原始类型被认为是旧的,一旦你使用原始类型,你不能在一个给定的参考,在所有使用泛型。 例如,看看这一个另一个问题: 结合原始类型和泛型方法
我怎样才能创建一个没有定义一个类类型的列表? (
<Employee>
)
如果我正确地读这篇文章,你只是想避免指定类型,是否正确?
在Java 7中,你可以做
List<Employee> list = new ArrayList<>();
但任何正在讨论的其他选择的只是要牺牲类型安全。