はい、Javaは間違いなくオブジェクトとの参照渡しです。
しかし、あなたがしていることは、あなたWriter
があなたが石で書かれていると仮定しているということです。GUI
つまり、それは常にと呼ばれるプロパティを持っているということtextBox
です。
物事の見た目だけで、Writer
のプロパティにアクセスして操作する責任を負わないようにする必要がありますGUI
。の内容を変更する場合は、クラスGUI
も再コーディングする必要があります。Writer
Writer
にメッセージを送信するように再コーディングすることもできます。これはGUI
、その責任はGUI
、書き込み方法ではなく、何を書き込むかを指示することだけであるためです。GUI
次に、そのメッセージを処理するのはに任せます。
class GUI
{
Writer w;
void initGUI()
{
w = new Writer(this);
}
void ReceiveMessage(string message)
{
this.textBox.text = message;
}
}
あなたのWriter
クラス:
class Writer
{
GUI ui;
public Write(GUI ui)
{
this.ui = ui;
// Don't send the message in the constructor.
}
// The program calls this function with whatever text the user enters.
public void SendMessage(string message)
{
ui.ReceiveMessage(message);
// Writer no longer depends on ui to have a textbox Element.
}
}
上記のコードは、インターフェースを使用して改善できます。このようにして、メッセージの受信方法を知る必要があるライターに何でも渡すことができます。
interface IMessageReceiver
{
void ReceiveMessage(string message);
}
これで、GUI
IMessageReceiverになります。
class GUI implements IMessageReceiver
{
Writer w;
void initGUI()
{
w = new Writer(this);
}
public void ReceiveMessage(string message)
{
this.textBox.text = message;
}
}
Writer
今のクラス:
class Writer
{
IMessageReceiver receiver;
public Write(MessageReceiver receiver)
{
this.receiver = receiver;
// Don't send the message in the constructor.
}
// The program calls this function with whatever text the user enters.
public void SendMessage(string message)
{
receiver.ReceiveMessage(message);
}
}
ここでの違いは、それWriter
がであるかどうかはもう気にしないということGUI
です。IMessageReceiver
メッセージの受信方法を知っているオブジェクトであれば、どのオブジェクトでもかまいません。
インターフェイスに慣れていない場合は、インターフェイスを読んだり調べたりしてください。それらは非常に便利ですが、そうでない場合は不可欠です!