强制两个参数化类型为不同的java
我有一个强制两个参数化类型为不同的java,java,generics,Java,Generics,我有一个抽象类处理器和两个扩展它的类: SimpleProcessor<T> extends Processor<T,T> SimpleProcessor扩展处理器 及 转换器扩展处理器 问题是我需要能够创建一个包含各种对象的列表,这就是为什么它们有相同的超类,但我还需要能够区分它们 我的问题是,我需要能够强制类型参数始终是不同的类型(T是一个数字,V是一个字符串=>正确,但是如果两者都是字符串,那么编译器将不接受它)。有没有一种用Java实现的方法 谢谢 好吧,你
抽象类处理器和两个扩展它的类:
SimpleProcessor<T> extends Processor<T,T>
SimpleProcessor扩展处理器
及
转换器扩展处理器
问题是我需要能够创建一个包含各种对象的列表,这就是为什么它们有相同的超类,但我还需要能够区分它们
我的问题是,我需要能够强制类型参数始终是不同的类型(T是一个数字,V是一个字符串=>正确,但是如果两者都是字符串,那么编译器将不接受它)。有没有一种用Java实现的方法
谢谢 好吧,你不能用一般的方法来做。但您可以使用不同的超级类型:
Converter<T extends SuperTypeA, V extends SuperTypeB> extends Processor<T, V>
在编译时无法确保这一点
在运行时,您有两个选项。一种是传递实际对象并比较具体类(这里已经给出了答案)。另一个需要使用反射
假设有人这样声明类:
class MyConverter扩展了转换器
如果有人实例化了如下对象:
MyConverter m=newmyconverter()代码>
或
Converter m=新转换器()代码>
编写一个函数来计算转换器的实际类型是不可能的。
但是,如果类是这样声明的:
class MyConverter扩展了转换器
使用反射可以看出这是一个数字到字符串的转换器。不清楚您想要什么。您是否可以分享您已经尝试过的代码,以便更好地了解它的错误和您想要的内容可能转换器不满足继承所需的测试。乍一看,您似乎有两种不同的类型。抽象类处理器有一个抽象方法V进程(T值);我试图做的是让用户能够为对象创建一个转换列表,以将其从类型a转换为类型B,然后每次我需要将类型a的值转换为类型B时,都能够运行此转换列表。但是,我需要知道转换链的某个部分是否会更改值i的类型这就是为什么我要子类化处理器。但我想让它尽可能安全,这就是为什么我需要能够检查转换器中的参数类型是否不同。
Converter<T extends SuperTypeA, V extends SuperTypeB> extends Processor<T, V>
public Converter(T t, V v) {
if (t.getClass() == v.getClass()) {
throw new IllegalArgumentException();
}
}