Java中的对象通信,没有带有getter和setter的静态变量

加布里埃尔·佐里拉(Gabriel A.Zorrilla)

我有一个JPanel,在其中跟踪鼠标指针在移动时的位置。我将其存储在某些字段中。如何访问吸气剂以读取另一个对象中已创建的对象的字段?

这只是一个例子,我在不使用静态变量的情况下努力进行对象通信。

一些代码:

class MainPanel extends JPanel implements MouseMotionListener {

  public int mouseX, mouseY

  public MainPanel(){
    this.addMouseMotionListener(this);
    ...
  }
  public void mouseMoved(MouseEvent e) {

    this.MouseX = e.getX();
    this.MouseY = e.getY();

  }

  public int getX(){

  return this.MouseX;
  }

  public int getY(){

  return this.MouseY;
  }
  ...
  }
}

class Something{

*** I want to, for example, print on console the XY coordinates of the -object-
 MainPanel. ****
}
  }

谢谢!

安东尼·阿乔里(Anthony Accioly)

有很多可能的解决方案。

实例范围

如果你需要MainPanelSomething范围(例如,在几种方法Something将使用MainPanel并在中间状态MainPanel是很重要的)。

将您的MainPanel实例传递Something

使用构造函数:

如果没有以下内容无法完成工作MainPanel

class Something {
    private final MainPanel mainPanel;

    public Something(MainPanel mainPanel) {
        this.mainPanel = mainPanel; 
    }

    public void myMethod() {
        System.out.printf("Mouse cordinates: %d x %d\n", mainPanel.getX(),
                mainPanel.getY());
    }
}

初始化代码:

MainPanel mainPanel = new MainPanel();
// ... put panel in frame, etc
Something something = new Something(mainPanel);

和/或公开一个二传手:

如果某项工作即使没有,也可以做到MainPanel

class Something {
    private MainPanel mainPanel;

    public void setMainPanel(MainPanel mainPanel) {
        this.mainPanel = mainPanel
    }

    // my other methods
}

初始化代码:

MainPanel mainPanel = new MainPanel();
// ... put panel in frame, etc
Something something = new Something();
something.setMainPanel(mainPanel);

方法参数

如果只需要MainPanel方法范围内的状态(不想保留MainPanelin中的引用Something),则可以传递MainPanelas实例的实这是独立方法的最佳策略。即使Something需要访问多个方法MainPanel,也没有必要将其存储MainPanel为字段,除非这些方法以某种方式在以下实例上“协同工作” MainPanel

public void myMethod(MainPanel mainPanel) {
    System.out.printf("Mouse postion: %d x %d\n", mainPanel.getX(),
            mainPanel.getY());
}

用法示例:

MainPanel mainPanel = new MainPanel();
Something something = new Something();
something.myMethod(mainPanel);

最后,除了考虑变量作用域外,您还应该考虑API真正需要什么才能正常工作。Something需要访问MainPanel或仅访问鼠标坐标?如果仅需要后者,则Something直接处理x和/y或引入一个中间对象(如果您可以编写一个接口,则更好),并Something从中解耦MainPanel

class MainPanel extends JPanel implements MouseMotionListener {

  public int mouseX, mouseY;
  // everything else

  public Point getMousePosition() {
      return new Point(this.mouseX, this.mouseY);
  } 
}

并继续Something

public void myMethod(Point mousePosition) {
    System.out.printf("Mouse position: %d x %d\n", mousePosition.getX(),
            mousePosition.getY());
}

为什么会更好?Something不知道MainPanel,它只知道Point您可以根据需要创建Points任何内容并将其发送给Something

用法示例:

MainPanel mainPanel = MainPanel();
MyOtherComponent myOtherComponent = MyOtherComponent(); 
Something something = new Something();
something.myMethod(mainPanel.getMousePosition());
something.myMethod(myOtherComponent.myMousePositionMethod());
// or even
something.myMethod(new Point(1,1));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Java静态变量没有更新?

来自分类Dev

带有setter和getter的Null对象参考SAXParser Android

来自分类Dev

带有静态变量的NullPointerException

来自分类Dev

带有静态变量的NullPointerException

来自分类Dev

静态变量没有增加

来自分类Dev

带有getter的公共静态最终变量

来自分类Dev

C ++和Java中的静态变量

来自分类Dev

结构中的私有静态变量

来自分类Dev

Getter-Setter和私有变量

来自分类Dev

无法理解 Java 中静态和非静态变量之间的区别。有人可以帮忙吗?

来自分类Dev

对于c ++中的单个静态变量,有没有比类更好的选择?

来自分类Dev

没有类的Typescript中的Getter / Setter

来自分类Dev

带有Getter但没有Setter的JAXB Java运行时错误

来自分类Dev

Swift:为什么没有dynamicType的非静态方法不能调用静态变量和常量(静态let)?

来自分类Dev

Swift:为什么没有dynamicType的非静态方法不能调用静态变量和常量(静态let)?

来自分类Dev

带有局部静态变量的调用函数

来自分类Dev

带有新分配的静态变量的C ++单例

来自分类Dev

了解带有静态变量的自我行为

来自分类Dev

带有局部静态变量的单例构造函数

来自分类Dev

在 C 语言中,带有指针访问的静态变量

来自分类Dev

在没有全局或静态变量的情况下配置Bison和Flex

来自分类Dev

集群中带有静态变量的 Neo4j 过程

来自分类Dev

没有参数和静态变量的递归

来自分类Dev

静态变量更改值,没有错误显示?

来自分类Dev

将实例变量放在.h中没有getter和setter(即,没有人可以设置或获取它)的用途是什么?

来自分类Dev

Java Json Jackson 在没有 getter 和 setter 的情况下保存私有字段

来自分类Dev

Ruby列出了没有getter和/或setter的对象实例方法

来自分类Dev

Java-具有相同名称的静态变量和参数

来自分类Dev

带有不同签名的Swift下标,用于getter和setter

Related 相关文章

  1. 1

    为什么Java静态变量没有更新?

  2. 2

    带有setter和getter的Null对象参考SAXParser Android

  3. 3

    带有静态变量的NullPointerException

  4. 4

    带有静态变量的NullPointerException

  5. 5

    静态变量没有增加

  6. 6

    带有getter的公共静态最终变量

  7. 7

    C ++和Java中的静态变量

  8. 8

    结构中的私有静态变量

  9. 9

    Getter-Setter和私有变量

  10. 10

    无法理解 Java 中静态和非静态变量之间的区别。有人可以帮忙吗?

  11. 11

    对于c ++中的单个静态变量,有没有比类更好的选择?

  12. 12

    没有类的Typescript中的Getter / Setter

  13. 13

    带有Getter但没有Setter的JAXB Java运行时错误

  14. 14

    Swift:为什么没有dynamicType的非静态方法不能调用静态变量和常量(静态let)?

  15. 15

    Swift:为什么没有dynamicType的非静态方法不能调用静态变量和常量(静态let)?

  16. 16

    带有局部静态变量的调用函数

  17. 17

    带有新分配的静态变量的C ++单例

  18. 18

    了解带有静态变量的自我行为

  19. 19

    带有局部静态变量的单例构造函数

  20. 20

    在 C 语言中,带有指针访问的静态变量

  21. 21

    在没有全局或静态变量的情况下配置Bison和Flex

  22. 22

    集群中带有静态变量的 Neo4j 过程

  23. 23

    没有参数和静态变量的递归

  24. 24

    静态变量更改值,没有错误显示?

  25. 25

    将实例变量放在.h中没有getter和setter(即,没有人可以设置或获取它)的用途是什么?

  26. 26

    Java Json Jackson 在没有 getter 和 setter 的情况下保存私有字段

  27. 27

    Ruby列出了没有getter和/或setter的对象实例方法

  28. 28

    Java-具有相同名称的静态变量和参数

  29. 29

    带有不同签名的Swift下标,用于getter和setter

热门标签

归档