gpt4 book ai didi

java - 让Java在重载方法中选择方法时考虑最具体的类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:27 25 4
gpt4 key购买 nike

我想根据对象的类型执行多个操作,而不使用 instanceof。起初我在考虑基于类型重载方法(如下所示),并认为 Java 可能会适本地选择方法(基于最具体的对象类)。

import java.util.ArrayList;
import java.util.List;


public class TestA {

public static void main(String[] args)
{
List<Object> list = new ArrayList();
list.add(new A());
list.add(new B());
list.add(new C());
list.add(new Object());

TestA tester = new TestA();

for(Object o: list)
{
tester.print(o);
}
}

private void print(A o)
{
System.out.println("A");
}

private void print(B o)
{
System.out.println("B");
}

private void print(C o)
{
System.out.println("C");
}

private void print(Object o)
{
System.out.println("Object");
}
}

class A {

}

class B extends A {

}

class C {

}

输出是:

Object
Object
Object
Object

但是我想要的输出是:

A
B
C
Object
  • 有没有办法让Java根据参数对象的最具体类型来选择方法?
  • 如果没有,我可以在不借助 instanceof
  • 的情况下寻找哪些替代方案来实现此类功能
  • 我实际上是在尝试模拟访问者模式,但看起来,访问者模式之所以起作用,是因为双重分派(dispatch),这使得被“接受”的参数在函数期间处于正确的类型调用,特别是 class A 中的 visitor.accept(this) 导致函数 visitor.accept(A o) 被调用。
  • 老实说,我反对 instanceof,因为我读过使用它是不好的做法;在这种情况下,这仍然是不好的做法吗?

最佳答案

我的答案是让类 A、B 和 C 实现一个公共(public)接口(interface)。

然后他们每个人都可以有自己的这个接口(interface)的特定实现。

这样,您可以为所有对象调用相同的方法(从而避免重载方法),还可以确保自定义功能基于对象的类型(即实例化它的类)。

关于java - 让Java在重载方法中选择方法时考虑最具体的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18148499/

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