有没有办法指定一个java泛型类型变量来扩展多个类中的任何一个?
假设我有两个类:有没有办法指定一个java泛型类型变量来扩展多个类中的任何一个?,java,generics,Java,Generics,假设我有两个类: 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
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);
}
}
公共C类
{
公共静态空间
g(T)
{
t、 f();
}
公共静态void main(字符串[]args)
{
A=新的A();
g(a);
}
}
但是编译器声称A不是“T扩展A&B”的有效替代品,我认为这是因为T必须同时扩展A和B,而A显然不是。我找不到一种方法来指定“T扩展a或B”之类的内容。这样的事情是不可能实现的吗?我是一名java新手,因此非常感谢您提供的任何帮助。您只能指定一种泛型类型改用界面。 一个接口指定了一组特定的方法,它的每个成员都必须有。一个类可以实现多个接口 在您的示例中,我将使用方法
f()
定义一个接口:
让A
和B
实现接口:
public class A implements MyInterface
{
@Override
public void f() {
// ...
}
}
public class B implements MyInterface
{
@Override
public void f() {
// ...
}
}
然后,您可以将接口指定为方法的参数类型:
public static void g(MyInterface obj)
{
obj.f();
}
有关接口的更多详细信息,请查看Java文档:谢谢您的输入。我想我应该更精确一点——我希望对我无法修改的第三方类使用通用静态方法。这些类没有我可以使用的公共接口,但出于某种原因,它们都实现相同的函数。我试图将一些重复的方法编码整合到一个方法中,目前每个类都需要重载。我还意识到,我可以通过将第三方类包装在一个类中来实现这一点。该类实现了通用方法,并简单地委托给第三方类方法,但我希望通过巧妙地使用泛型来避免这种笨拙:)@MistahMikey您可以使用反射:
clazz.getMethod(“f”).invoke(obj)
@MistahMikey如果您可以联系第三方并建议添加共享接口或一系列接口,我建议您这样做。它不会直接解决您的问题,但可以帮助这些类的其他用户,并帮助他们的开发人员改进。
public static void g(MyInterface obj)
{
obj.f();
}