gpt4 book ai didi

java - 类型变量的泛型类型?

转载 作者:行者123 更新时间:2023-12-01 04:37:37 26 4
gpt4 key购买 nike

如何在 Java 泛型中表达以下类型关系:

class MyClass<T> { }

interface MyInterface<T extends MyClass> {
void m1(T<Integer> argument);
void m2(T<String> argument);
void m3(T<?> argument);
}

没有编译器投诉。这可能吗?我想确保所有方法都接收 MyClass 的相同(子)类,同时不破坏类型安全。在域中,不同的子类 og MyClass 是没有意义的。我真的必须像这样列出三个泛型类型变量吗:

class MyClass<T> { }

interface MyInterface<T1 extends MyClass<Integer>,
T2 extends MyClass<String>, T3 extends MyClass<?>> {
void m1(T1 argument);
void m2(T2 argument);
void m3(T3 argument);
}

我觉得这篇文章读起来很糟糕,也没有像我希望的那样很好地表达我的意图。这个问题与我关于泛型的其他问题相关 Raw types inside of generic definition这仍然让我感到困惑。也许有人可以帮忙!谢谢。

最佳答案

不确定这是否是一个好方法。我觉得使用下面的方法你不能“绑定(bind)”参数 m1 , m2 , m3方法,相反,在调用时您可以有权使用任何类型的参数,无论是 MyClass<Integer>MyClass<String>

public class MyClass<T> { }

interface MyOtherClass<T extends MyClass<?>> {
void m1(T argument);
void m2(T argument);
void m3(T argument);
}

以及实现者

class MyOtherClassImpl<T extends MyClass<?>> implements MyOtherClass<T> {

@Override
public void m1(T argument) {

}

@Override
public void m2(T argument) {

}

@Override
public void m3(T argument) {

}

}

这就是你如何调用

  MyOtherClass<MyClass<?>> otc = new MyOtherClassImpl<MyClass<?>>();
MyClass<Integer> m1 = new MyClass<Integer>();
MyClass<String> m2 = new MyClass<String>();
MyClass<Object> m3 = new MyClass<Object>();
otc.m1(m1);
otc.m2(m2);
otc.m3(m3);

关于java - 类型变量的泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com