如何正确实现Java类之间的通信

时间:2016-11-05 17:51:00

标签: java class

我是Java编程的初学者,我目前正在开发一个具有更复杂的类结构和GUI的应用程序。这可能是一个愚蠢的问题,但谷歌很难,所以我在这里问。

我有一个主要课程,看起来像这样:

package app;

public class App {
    private FirstClass fc;
    private SecondClass sc;

    public App () {
        fc = new FirstClass ();
        sc = new SecondClass ();

        // ... code continues ...
    }
}

假设SecondClass是在.java文件之外定义的(就像GUI表单一样)。有没有办法让我从“sc”实例访问“fc”实例(或App实例的其他成员变量)(不传递“this”指针)?类似的东西:

class SecondClass {
    public void someMethod() {
        getWhoeverCreatedThisInstance().fc.getSomeData();

        // ... code continues ...
    }
}

如果没有,我做错了什么?我的设计应该不同吗?也许将“fc”设置为静态?但是,如果我希望我的应用程序的更多类能够相互通信,我应该将它们全部静态化吗?那么有什么非静态的东西呢?我可以在“SecondClass”的构造函数中传递“App”或“fc”实例的“this”指针,但是当需要此行为的类数量增加时,该解决方案似乎并不优雅。

有什么想法吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

我的建议是实现一个带接口的回调系统。您的每个类都相互通信应该实现这些。 这些类应该注册到创建类。 然后,他们可以在create类中调用一个方法,该方法调用每个已注册类的接口方法并以这种方式传递数据。

这个答案可能有所帮助 https://stackoverflow.com/a/18279545

答案 1 :(得分:0)

如果您想开发GUI应用程序,您应该真正了解基本概念。这可能非常耗时,但这是必要的,否则您将会加密奇怪的行为。我会给你一个基本的理解来回答你的问题。

您会想到简单的控制台应用程序,您通常只有一个线程,并且传递对象是有效的。对于多个线程,即使使用static个变量,这也是致命。每个变量或对象都可以同时修改,而另一个帖子可能无法看到' 及时更改。这是一个复杂的问题,因为每个线程也有缓存和单独的堆栈。简而言之,fcApp中的sc可能并不总是同步,因此读取和写入可能不一致。

现在该怎么办?学习GUI编程的概念。通常,您甚至不必为简单的事物共享对象。如果GUI控件触发操作,请使用Listener,查看here。例如,如果要访问数据库,则只需为每个请求或按钮单击创建一个新的连接对象。这很容易启动,以后会增加复杂性。

共享对象的一个​​简单变体是使用synchronized关键字,这可确保方法或字段一次只能被一个线程访问。这是一个example。另请参阅Java提供的线程安全数据结构(java.util.concurrent)。

出于高级目的,您将拥有一个单独的线程,您可以将它们与套接字连接以传递消息或数据。