在方法中返回List <! - ? - >有什么用?

时间:2010-02-21 10:23:33

标签: java generics

e.g。

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

或者我应该返回

List<Object>

4 个答案:

答案 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>,您收到编译错误。这是因为虽然ObjectString的超类型,但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 !
}