e.g。
public interface CacheClient
{
List<?> getKeysWithExpiryCheck();
}
或者我应该返回
List<Object>
答案 0 :(得分:3)
Here是Java Generics的一个很好的介绍。 [A]和[B]解释之间的区别?和对象。基本上,?表示类型未知,如果您需要将项添加到列表中,这是一个问题。但是,如果您只从列表中读取,则可以将结果视为对象。虽然,我建议使用像
这样的东西public interface CacheClient {
List<? extends Key> getKeysWithExpiryCheck();
}
[A] http://java.sun.com/docs/books/tutorial/extra/generics/subtype.html
[B] http://java.sun.com/docs/books/tutorial/extra/generics/wildcards.html
答案 1 :(得分:1)
如果您将方法声明为
List<Object> getKeysWithExpiryCheck();
您只能从中返回List<Object>
个实例,而不会返回其他内容。如果你是尝试返回List<String>
,您收到编译错误。这是因为虽然Object
是String
的超类型,但List<Object>
不是List<String>
的超类型。
答案 2 :(得分:0)
是否可以确保类型安全?返回对象列表意味着列表可以保存任何内容。
答案 3 :(得分:0)
基本上它意味着集合可以包含任何类型。 但是,使用它时无法修改集合。
public void doSomething(Collection<?> col) {
for (Object o : col) {
System.out.println(o);
}
col.add("string"); //Compile Error here !
}