代码之家  ›  专栏  ›  技术社区  ›  Atmocreations

重载方法优先级

  •  5
  • Atmocreations  · 技术社区  · 14 年前

    我有一个名为element的基类。其他一些类(如标签和图像)都扩展了这个类。

    我现在有一个调度类,它有以下方法:

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

    如果现在我有一个label实例(扩展元素),我想将它传递给 createEditor() ,为什么调用最通用的方法(第二个方法)?这不是最正常的吗 具体的 方法( createEditor(Label e) )叫什么?

    我绝对需要元素param的方法,以便“捕获”a)实现元素但在此调度类中没有自己特定方法的所有类。

    我使用Java 6,如何“修复”这个?

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

    谢谢和问候

    5 回复  |  直到 14 年前
        1
  •  6
  •   Bozho    14 年前

    • Element createEditor()
    • Label

    • EditorFactory
    • DefaultEditorFactory ListEditorFactory
    • public Editor createEditor() {
           editorFactory.createEditor(this);
      }
      


    createEditor(obj) Element obj = .. Label obj = ..

        2
  •  2
  •   Yishai    14 年前

     Element label = getLabel();
     AbstractPropertyEditor<?> editor = createEditor(label);   
    

     Element label = getLabel();
     AbtractPropertyEditor<?> editor;
     if(label instanceof Label) {
          editor = createEditor((Label) label);
     } else {
          editor = createEditor(label);
     }
    

        3
  •  1
  •   JRL    14 年前
        4
  •  0
  •   fastcodejava    14 年前

    Element element = new Label();
    

        5
  •  0
  •   aturshah    14 年前

    public class Car {    
    }
    
    public class Toyota extends Car {    
    }
    
    public class MyCar {
    
        public void run(Car c) {
            System.out.println("Run any Car");
        }
    
        public void run(Toyota t) {
            System.out.println("Run Toyota Car");
        }
    
        public static void main(String[] args) {
            MyCar myCar = new MyCar();
    
            Car c1 = new Car();
            myCar.run(c1); // Output: Run any Car
    
            Toyota c2 = new Toyota();
            myCar.run(c2); // Output: Run Toyota Car
    
            Car c3 = new Toyota();
            myCar.run(c3); // Output: Run any Car    
        }
    }
    

    Element obj1 = new Label();
    Dispatcher.createEditor(obj); // Method with Element argument is called 
                                  // as you are passing Element 
    
    Label obj2 = new Label();
    Dispatcher.createEditor(obj); // Method with Label argument is called 
                                  // as you are passing Label
    

    推荐文章