如何从类中的动态类型的对象中调用方法?

时间:2015-03-14 01:10:03

标签: java

我想做什么:

调用一些存在于多个类中的方法,而将实体传递到另一个类中。

我在做什么:

我有几个扩展'JPanel'的类,并且所有类都有常用的方法:alert()refresh()

public class MyView01  extends JPanel{

    public void alert(String msg){
        // do something...
    }
    public void refresh(){
        // do some other thing...
    }

}

public class MyView02  extends JPanel{

    public void alert(String msg){
        // do something...
    }
    public void refresh(){
        // do some other thing...
    }

}

然后我有一个动作的类,它会将我的类的实质传递给它,用于从我的类中调用方法。

public class MyViewAction{

    private Object view;

    public void setView(Object view){
        this.view = view;
    }

    public void someOperating(){

        int result = doSomthingElse();
        if(result == 1){
            view.refresh();
        }else{
            view.alert("The answer is 42.");
        }
    }

}

虽然可以在两个类中使用someOperating() - MyView01MyView02。我想使用MyViewAction类来声明它(DRY)。我想将不同类型的对象传递到视图字段中,为此,我尝试了“对象”类型,但是我不能这样调用方法。

我应该改变什么来使其有效?

1 个答案:

答案 0 :(得分:1)

以下是通过创建公共界面来实现此目的的方法。

   public interface View {
       void alert(String msg);
   }

在两个View类中实现界面

public class MyView01  extends JPanel implements View{

    public void alert(String msg){
        System.out.print("From View 01 " + msg);
    }
}

class MyView02  extends JPanel implements View{

    public void alert(String msg){
        System.out.print("From view 02 " + msg);
    }

}

声明使用视图作为'查看'型

公共类MyViewAction {

    private View view;

    public void setView(View view){
        this.view = view;
    }

    public void someOperating(String msg){

        view.alert(msg);

    }

}

并使用它......

public class Main {

    public static void main(String[] args) {

        MyViewAction  myView = new MyViewAction();
        MyView01 v1 = new MyView01();
        MyView02 v2 = new MyView02();

        myView.setView(v1);
        myView.someOperating("View 1 out\n");

        myView.setView(v2);
        myView.someOperating("View 2 out\n");

    }
}