[英]using methods of other classes to “overwrite” variables
我是Java的相對新手,並且使用javafx進行了一些實驗
我想使用B類的方法更改A類的變量
Main:這是主類,它包含所有必需的東西(顯示primaryStage等),它確實具有構造函數,因此其未創建實際的“主對象”
public class Main extends Application {
Sub sub = new Sub();
int a;
// stuff
public void aMethod() {
sub.subMethod();
}
}
Sub:此類的唯一目的是更改變量a,它不包含用於創建“子對象”的構造函數
public class Sub {
//stuff
subMethod(){
int a = 5;
}
如果我把線Main main;
在Sub類中,如果我正在調用subMethod(),則程序將給我一個nullpointer異常。 好的...我想是因為我實際上沒有創建主對象...到目前為止還不錯。
但是...如果我把Main main = new Main();
該程序甚至不會開始給我“運行應用程序時出現異常”錯誤
奇怪的是,如果我把Main main = new Main();
在subMethod中...
subMethod(){
Main main = new Main();
int a = 5;
}
...該死的東西實際上起作用了...(它的速度很慢,猜測是因為每次調用該方法都會創建一個新對象)
為什么會這樣?
以及如何正確完成? :)(使用其他類的方法“覆蓋”變量)
問候紅色
您不應在程序中創建多個Main
實例。 也許Main
不是存儲可變狀態(類成員)最好的地方,但如果你想,你需要傳遞的實例Main
以subMethod
(和做a
公共的,或者提供一個公共setter方法):
public class Main extends Application {
Sub sub = new Sub();
public int a;
// stuff
public void aMethod() {
sub.subMethod(this);
}
}
public class Sub {
//stuff
subMethod(Main main){
main.a = 5;
}
因此,您需要一種方法來更改另一個類的字段的值。 有幾種方法可以做到這一點。 如果你有這個課
public Class A {
private int a;
...
public void setA(int a) {
this.a = a;
}
}
你可以做這樣的事情
public Class B {
private static A instance;
....
public static void setA(int a) {
instance.setA(a);
}
}
或者您可以將A in作為set方法的參數
public Class B {
...
public static void setA(A a, int val) {
a.setA(val);
}
}
如果要直接訪問A
上的字段,則必須將其公開(通常這不是您想要執行的操作,因為它提供了完整的訪問權限,而不僅僅是僅提供其他類所需的訪問權限)
Public Class A {
public int a;
...
}
那你可以做
Public Class B {
...
public static void setVal(A a, int val) {
a.a = val;
}
}
此外,如果你沒有方法setA
中B
作為static
你必須調用它的instance
的B
狀
B b = new B();
b.setA(a, val);
好像它是靜態的,您可以在class B
上調用它
B.setA(a, val);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.