那里';“这是一门私人课”;P";在A.java中(“P”使用A.java中的一些方法),B.java如何访问;P";?
好的,我在Order.java中有一个那里';“这是一门私人课”;P";在A.java中(“P”使用A.java中的一些方法),B.java如何访问;P";?,java,Java,好的,我在Order.java中有一个私有类MyClickHandler。我希望Customer.java能够使用MyClickHandler,但我不想将私有类MyClickHandler的确切代码复制到B.java 然而,问题是,MyClickHandler在Order.java中也使用了一些方法。幸运的是,这些方法也需要在Customer.java中使用 Order.java public class Order{ private class MyClickHandler imple
私有类MyClickHandler
。我希望Customer.java能够使用MyClickHandler
,但我不想将私有类MyClickHandler
的确切代码复制到B.java
然而,问题是,MyClickHandler
在Order.java中也使用了一些方法。幸运的是,这些方法也需要在Customer.java中使用
Order.java
public class Order{
private class MyClickHandler implements ClickHandler{
CheckBox myCheckBox;
MyTextColumn myTextColumn;
public MyClickHandler(CheckBox myCheckBox, MyTextColumn myTextColumn){
this.myCheckBox=myCheckBox;
this.myTextColumn=myTextColumn;
}
@Override
public void onClick(ClickEvent event) {
// TODO Auto-generated method stub
if(myCheckBox.getValue()){
insertColumn(myTextColumn);
}
}
}
public void insertColumn(MyTextColumn myTextColumn){
// This method is also called by other methods in Order.java
}
public void removeColumn(MyTextColumn myTextColumn){
// This method is also called by other methods in Order.java
}
}
现在我希望Customer.java使用
MyClickHandler
。此外,它还需要使用方法insertColumn
&removeColumn
您可以创建一个公共方法来创建MyClickHandler的新实例或返回一个已经存在的实例
不过我不建议这样做,我觉得包保护类是一个更好的解决方案。如果不确切知道这应该做什么,很难完全清理设计,但作为开始,我会这样做:
公开
Order
和Customer
进入一个超类(名为Parent
以下-错误
名字!)MyClickHandler
的一个实例
例如,Order
,并向其传递对this
的引用,以便
对它调用方法的方式与对私有对象调用方法的方式相同
班级在这里,你有一个有趣的逻辑组合,可以用
- 继承-对于要在顺序和客户中实现相同的方法,即概念上属于这些类的常见行为,因此在超类中实现为泛型行为是有意义的
- 组合——正如您希望在这两个地方使用的ClickHandler实现一样——这是一个在概念上完全独立的逻辑模块,应该将其拉入自己的类中,只供其他两个使用
public class Parent {
public void insertColumn(MyTextColumn myTextColumn){
// implement
}
public void removeColumn(MyTextColumn myTextColumn){
// implement
}
}
public class Order extends Parent{
ClickHandler clickHandler;
public ClickHandler getClickHandler(CheckBox myCheckBox, MyTextColumn myTextColumn) {
return new MyClickHandler(this, myCheckBox, myTextColumn);
}
}
public class Customer extends Parent {
//similar to Order
}
public class MyClickHandler implements ClickHandler {
private CheckBox myCheckBox;
private MyTextColumn myTextColumn;
private Parent parent;
public MyClickHandler(Parent parent, CheckBox myCheckBox, MyTextColumn myTextColumn){
this.parent = parent;
this.myCheckBox = myCheckBox;
this.myTextColumn = myTextColumn;
}
@Override
public void onClick(ClickEvent event) {
// TODO Auto-generated method stub
if(myCheckBox.getValue()){
parent.insertColumn(myTextColumn);
}
}
}