我想做什么:
调用一些存在于多个类中的方法,而将实体传递到另一个类中。
我在做什么:
我有几个扩展'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()
- MyView01
,MyView02
。我想使用MyViewAction
类来声明它(DRY)。我想将不同类型的对象传递到视图字段中,为此,我尝试了“对象”类型,但是我不能这样调用方法。
我应该改变什么来使其有效?
答案 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");
}
}