gpt4 book ai didi

java - 重载方法优先级

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:16 27 4
gpt4 key购买 nike

我有一个名为 Element 的基类。其他一些类(如 Label 和 Image)都扩展了这个类。

我现在有一个具有以下方法的调度类:

public class Dispatcher {
public static AbstractPropertyEditor<Label> createEditor(Label e) {
...
}

public static AbstractPropertyEditor<Element> createEditor(Element e) {
...
}
}

如果现在我有一个 Label 实例(它扩展了 Element)并且我想将它传递给 createEditor(),为什么调用最通用的方法(第二个)?调用最特定 方法 (createEditor(Label e)) 不是很正常吗?

我绝对需要带有 Element-param 的方法,以便“捕获”所有那些 a) 实现 Element 但在此调度类中没有自己的特定方法的类..

我正在使用 Java 6,如何“修复”这个问题?

编辑: 好吧,我不得不承认这根本不是关于泛型的。但那是我第一次遇到它。

感谢和问候

最佳答案

你为什么不:

  • 创建提供默认createEditor()实现的Element抽象类
  • 使 Label 覆盖 createEditor()

因此您将不需要静态实用程序并将实现您的目标。

如果你需要Element作为一个接口(interface),那么:

  • createEditor() 定义为 Element 的方法
  • 定义一个EditorFactory接口(interface)
  • 提供DefaultEditorFactoryListEditorFactory
  • Element 的实现者中使用适当的工厂:

    public Editor createEditor() {
    editorFactory.createEditor(this);
    }

具体的 EditorFactory 在初始化期间或通过某种依赖注入(inject)实例化。


根据您的具体问题 - 这取决于您在那里编译的类型。如果您调用 createEditor(obj),它将取决于它是 Element obj = .. 还是 Label obj = ..

关于java - 重载方法优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2262744/

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