gpt4 book ai didi

java - 有什么方法可以指定扩展多个类中任意一个的 java 泛型类型变量吗?

转载 作者:行者123 更新时间:2023-12-01 12:16:49 25 4
gpt4 key购买 nike

假设我有两门课:

public class A
{
public void
f()
{
}
}

public class B
{
public void
f()
{
}
}

我想编写一个通用静态方法,可以在传递 A 或 B 的实例时调用 f。我尝试过:

public class C
{
public static <T extends A & B> void
g(T t)
{
t.f();
}

public static void main(String[] args)
{
A a = new A();

g(a);
}
}

但是编译器声称 A 不是“T extends A & B”的有效替代品,我认为这是因为 T 必须同时扩展 A 和 B,而显然 A 不会。我找不到一种方法来指定“T extends A OR B”之类的内容。难道这样的事情就无法实现吗?我是一个java新手,所以任何有关这方面的帮助将不胜感激。

最佳答案

您只能指定一种泛型类型。 改用接口(interface)。

接口(interface)指定了一组特定的方法,它的每个成员都必须具有。一个类可以实现多个接口(interface)。

在您的示例中,我将使用方法 f() 定义一个接口(interface):

public interface MyInterface {
void f();
}

AB实现接口(interface):

public class A implements MyInterface
{
@Override
public void f() {
// ...
}
}
public class B implements MyInterface
{
@Override
public void f() {
// ...
}
}

然后您可以将接口(interface)指定为方法的参数类型:

public static void g(MyInterface obj)
{
obj.f();
}

有关接口(interface)的更多详细信息,请查看 Java 文档:What Is an Interface?

关于java - 有什么方法可以指定扩展多个类中任意一个的 java 泛型类型变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947738/

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