繁体   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