4

例如

public interface CacheClient
{
    List<?> getKeysWithExpiryCheck();
}

或者我应该返回

List<Object>
4

4 回答 4

3

是Java泛型的一个很好的介绍。[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

于 2010-02-21T10:31:15.140 回答
1

如果您将方法声明为

List<Object> getKeysWithExpiryCheck();

您只能List<Object>从中返回实例,而不能返回其他任何内容。如果你尝试返回List<String>,你会得到一个编译错误。这是因为虽然Object是 的超类型String,但List<Object>不是 的超类型List<String>

于 2010-02-21T10:42:32.163 回答
0

难道是为了保证类型安全?返回对象列表意味着该列表可以包含任何内容。

于 2010-02-21T10:32:42.280 回答
0

基本上这意味着该集合可以包含任何类型。但是,使用时无法修改集合。

public void doSomething(Collection<?> col) {
    for (Object o : col) {
      System.out.println(o);
    }

    col.add("string"); //Compile Error here !
}
于 2010-02-21T10:51:53.297 回答