我想创建一个具有以下方法的接口:
public interface MyInterface {
public Class<X> getClass();
public void handle(X message);
}
其中X必须在两种方法中都是相同的类型。我需要这样做的原因是我得到的消息是blob需要被转换到适当的类(使用getClass)然后我想强制实现者实现一个带有相应类的handle方法(而不是假设有一个并使用反射来调用它。)
似乎唯一的方法是在接口中添加一个类型参数,如下所示:
public interface MyInterface<T> {
...
}
但由于级联依赖关系需要在各种其他类中指定该类型,因此这不太理想。有什么建议?谢谢!
答案 0 :(得分:2)
其中X必须在两种方法中都是相同的类型
根据定义,您不能强制接口的两种方法相互依赖
getClass
和handle
始终是两种不同的方法
你应该做的是有一个方法,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>
对两种方法都是一样的。