gpt4 book ai didi

java - A.java中有一个私有(private)类 "P"(("P"使用了A.java中的一些方法),B.java如何访问 "P"?

转载 作者:行者123 更新时间:2023-12-01 13:21:01 26 4
gpt4 key购买 nike

好的,我在 Order.java 中有一个 私有(private)类 MyClickHandler。我希望 Customer.java 能够使用 MyClickHandler,但我不想将 private class MyClickHandler 的确切代码复制到 B.java。

但是,问题是MyClickHandler还使用了Order.java中的一些方法。幸运的是,这些方法也需要在 Customer.java 中使用。

订单.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。此外,还需要使用方法 insertColumnremoveColumn

最佳答案

如果不确切知道这应该做什么,就很难完全清理设计,但作为开始,我会做这样的事情:

  1. 将所有类设为public
  2. 提取常见行为OrderCustomer 进入父类(super class)(下面名为 Parent - 不好)名字!)
  3. 只需在 for 中实例化 MyClickHandler 的实例即可例如,Order,并将对 this 的引用传递给它,以便您可以以与私有(private)方法相同的方式调用它的方法类。
<小时/>
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);
}
}
}

这里你有一个有趣的逻辑组合,被拉出来是有意义的

  • 继承 - 如果您希望在 Order 和 Customer 中实现相同的方法,即概念上属于这些类的常见行为,因此作为通用实现是有意义的父类(super class)中的行为

  • 组合 - 正如您想要在两个地方使用的 ClickHandler 实现一样 - 这是一个概念上完全独立的逻辑模块,应该将其拉出到自己的类中并直接使用其他两个。

关于java - A.java中有一个私有(private)类 "P"(("P"使用了A.java中的一些方法),B.java如何访问 "P"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028760/

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