Media
という名前のメソッドを持つsetLoanItem
という名前のクラスがあります。
public void setLoanItem(String loan) {
this.onloan = loan;
}
次の方法で、GUI
という名前のクラスからこのメソッドを呼び出そうとしています。
public void loanItem() {
Media.setLoanItem("Yes");
}
しかし、私はエラーが発生しています
非静的メソッドsetLoanItem(Java.lang.String)は静的コンテキストから参照できません
onloan
クラスの変数Media
をGUI
クラスの "Yes"に変更しようとしています。
私は同じエラーメッセージで他のトピックを見ましたが、クリックはありません!
インスタンスメソッドは、インスタンスから呼び出す必要があります。 setLoanItem
メソッドはインスタンスメソッド(修飾子static
を持たない)で、機能するために必要です(呼び出されるインスタンスに値を設定しているため(this
))。
メソッドを呼び出す前に、クラスのインスタンスを作成する必要があります。
Media media = new Media();
media.setLoanItem("Yes");
(ところで、「Yes」を含む文字列の代わりにブール値を使用する方が良いでしょう。)
setLoanItemはインスタンスメソッドです。つまり、呼び出すにはMediaクラスのインスタンスが必要です。 Mediaタイプ自体で呼び出しようとしています。
静的/インスタンスメンバがどのように機能するかを確認するために、いくつかの基本的なオブジェクト指向のチュートリアルを調べてください。
setLoanItem()
は静的メソッドではなく、インスタンスメソッドです。つまり、そのクラス自体ではなく、そのクラスの特定のインスタンスに属します。
基本的に、whatメソッドを呼び出すメディアオブジェクトを指定しておらず、クラス名のみを指定しています。数千のメディアオブジェクトが存在する可能性があり、コンパイラはあなたが何を意味したかを知る方法がないため、それに応じてエラーを生成します。
おそらく、メソッドを呼び出すメディアオブジェクトを渡す必要があります。
public void loanItem(Media m) {
m.setLoanItem("Yes");
}
インスタンスデータから静的データを正しく分離する必要があります。コードでは、onLoan
とsetLoanItem()
はインスタンスメンバーです。それらを参照/呼び出したい場合は、インスタンスを介して行う必要があります。だからあなたはどちらかが欲しい
public void loanItem() {
this.media.setLoanItem("Yes");
}
または
public void loanItem(Media object) {
object.setLoanItem("Yes");
}
そのインスタンスをどのように渡したいかに応じて。