簡體   English   中英

如何從(默認程序包)訪問程序包中的非靜態類字段?

[英]How to access non-static class fields in a package from the (default package)?

因此,我有一個帶有此get()方法的類(我們稱它為“ A”),該方法返回一個類字段,並且我想從另一個類(“ B”)進行訪問。 重要提示:這兩個類都是abstract 這些類在同一package (所有AB成員都package privatepackage private )。 Main類沒有包(或者更好的是默認包)。

[之前:扭曲和無用的描述]

我需要從B類訪問Aget()方法。

嘗試過:

1)非靜態呼叫Aobj.get()從起始main -位於根對象,但它似乎要的靜態調用(怪異,沒有成員是static );

2)嘗試靜態訪問它,但我得到了Cannot make a static reference to the non-static field錯誤(當然)。

...所以我被困住了,但仍然遇到訪問語法錯誤,兩種方法都嘗試。 有什么建議嗎?

編輯:

所以我結束了。 現在,我將嘗試解釋我的錯誤。

基本上 ,問題是我想從包中的類訪問位於Main類(默認包)中的對象。 所以我遇到了可見性問題。

在其他情況下,我將解決導入該類的問題,但是我發現您無法導入位於默認包中的類 ,因此我創建了一個main包並在B類中導入了Main類。

我一直犯的最嚴重錯誤是認為我必須訪問 main.main(String[])... etc ...Aobj main 本身開始 ,這確實是一個非常糟糕的想法 (仍然無法弄清楚如何我認為)。

實際上,就像斯蒂芬·C指出的那樣:

無論包的情況如何,以及通過其他類的路徑如何,都是如此。

最后,是代碼示例……老實說,現在的代碼與我編寫此問題的時代確實有所不同,並且說實話,由於我不記得我試圖嘗試的所有錯誤邏輯,因此我無法重現錯誤條件實現。 (我的錯。)這次我只想對自己做正確的解釋。

感謝大家的幫助。

如果B的get()方法不是static的, B調用該方法,則需要B的實例。 例如

  B b = ....
  b.get();

不管包的情況如何 ,以及您通過其他類的路徑如何 ,等等,都是如此。 (盡管我不確定我是否完全理解您對所有這些的“散文”描述...)

僅從您描述的內容(沒有代碼),您就需要訪問b的實例。 有幾種方法可以解決。 如果所討論的A中的方法可以為每個調用使用不同的B實例,則只需向該方法添加一個B參數:

public class B {

    public int get() { //Or whatever the return type of get is
        //...
    }

}

public class A {

    public int methodThatNeedsABInstance(B instance) {
        int x = instance.get(); //Can call get method
    }

}

然后由以下方式調用:

B b = new B();
A a = new A();
a.methodThatNeedsABInstance(b);

如果每個A實例都應使用相同的B實例進行所有調用,則將其設置為B類型的字段:

public class A {

    private B instance;

    //Constructors, setters and getters for b as necessary    

    public int methodThatNeedsABInstance() {
        int x = instance.get(); //Can call get method
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM