在java中使用通用接口作为返回类型

时间:2015-07-16 16:54:49

标签: java generics interface

你好我有以下界面和两个以下列方式重复它的对象

public interface MyObject<T> {
  T getId();
  String getName();
}

public class ObjectA implements MyObject<Integer> {
  @Override
  public Integer getId() {
    return 0;
  }

  @Override
  public String getName() {
    return "A";
  }
}

public class ObjectB implements MyObject<Long> {
  @Override
  public Long getId() {
  return 0;
 }

  @Override
  public String getName() {
    return "B";
  }

}

我想创建另一个接口来声明返回MyObject

类型的对象的方法
public interface AnotherObject {
  public MyObject<?> getmyObject();
}

这是使用泛型类型对象作为返回类型的正确方法吗?

1 个答案:

答案 0 :(得分:1)

当您编写接口AnotherObject时,它将编译。但通配符意味着可以返回任何类型参数。获取MyObject对象并在其上调用getId必须返回Object,这不是非常有用。

您可以在界面上定义类型参数T,它将在getMyObject的返回类型的范围内,您可以在其中引用它。

public interface AnotherObject<T> {
    public MyObject<T> getMyObject();
}

这样,MyObject可以返回T类型。实际上,您可能AnotherObject<Integer>可以返回MyObject<Integer>方法返回getId()而不是Integer的{​​{1}}。