在接口中使用Java泛型

时间:2012-05-01 10:39:03

标签: java generics

我想创建一个具有以下方法的接口:

public interface MyInterface {
  public Class<X> getClass();
  public void handle(X message);
}

其中X必须在两种方法中都是相同的类型。我需要这样做的原因是我得到的消息是blob需要被转换到适当的类(使用getClass)然后我想强制实现者实现一个带有相应类的handle方法(而不是假设有一个并使用反射来调用它。)

似乎唯一的方法是在接口中添加一个类型参数,如下所示:

public interface MyInterface<T> {
...
}

但由于级联依赖关系需要在各种其他类中指定该类型,因此这不太理想。有什么建议?谢谢!

2 个答案:

答案 0 :(得分:2)

  

其中X必须在两种方法中都是相同的类型

根据定义,您不能强制接口的两种方法相互依赖 getClasshandle始终是两种不同的方法 你应该做的是有一个方法,handle并作为参数传递一个类的类(可能是一个简单的Enum或任何指标)并委托Factory创建在handle方法中使用的适当类 因此handle方法将(最终)获得适当的类来使用。

答案 1 :(得分:2)

您可以为方法指定泛型类型参数,如下所示:

public <X> void handle(X message);

但是这不能确保方法之间的一致性,所以如果你有:

public <X> Class<X> getClazz();
public <X> void handle(X message);

你不能说<X>对两种方法都是一样的。