强制两个参数化类型为不同的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();

    }
}