5

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

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

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

似乎这样做的唯一方法是向接口添加一个类型参数,如下所示:

public interface MyInterface<T> {
...
}

但这并不理想,因为级联依赖项需要在各种其他类中指定该类型。有什么建议么?谢谢!

4

2 回答 2

2

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

您不能仅通过定义强制接口的 2 个方法相互依赖。
getClass并且handle将始终是 2 个单独的方法。
您可能应该做的是有 1 个方法,并将类的类型handle作为参数传递(可以是像 an或任何指示符一样简单的东西)并委托给 a以创建要在方法内使用的适当类。 所以方法将(最终)获得适当的类来使用。EnumFactoryhandle
handle

于 2012-05-01T10:48:36.717 回答
2

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

public <X> void handle(X message);

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

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

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

于 2012-05-01T10:55:47.900 回答