如何从(默认包)访问包中的非静态 class 字段?
How to access non-static class fields in a package from the (default package)?
所以我有这个 class(我们称它为 "A")和这个 get()
方法,其中 returns 一个 class 字段,我想要从另一个 class ("B") 访问。 重要:两个 class 都是 abstract
。 这些 class 都在同一个 package
(package private
A
和 B
成员)。 Main
class 没有包(或者更好,默认包)。
[之前:扭曲且无用的描述]
我需要从 B
class 访问 A
的 get()
方法。
尝试过:
1) 非静态调用Aobj.get()
从位于main
的根对象开始,但似乎想要静态调用(奇怪,成员的none 是static
);
2) 试图静态访问它,但我得到了 Cannot make a static reference to the non-static field
错误(当然)。
...所以我被卡住了,仍然遇到访问语法错误,我尝试了两种方法。有什么建议吗?
编辑:
这样我就告一段落了。我现在将尝试解释我的错误。
基本上,问题是我想从 class 访问位于 Main
class(默认包)中的对象在一个包内。所以我遇到了可见性问题。
在其他情况下,我会解决导入 class,但我发现 you cannot import a class located in the default package,所以我创建了一个 main
包并导入 Main
class 在 B
class.
我一直犯的最严重的错误是认为我必须访问 main.main(String[])... etc ...Aobj
从 main
本身,这是一个非常非常糟糕的想法(仍然无法弄清楚我是怎么想的)
事实上,就像 Stephen C 指出的那样:
The is true irrespective of the situation with packages, and irrespective of the path you take through other classes.
最后,代码示例...老实说,现在的代码与我写这个问题的时候真的不一样了,老实说,我无法重现错误的情况,因为我不记得所有的错误我试图实现的逻辑。 (我的错。)我只希望这次能好好解释一下自己。
感谢大家的帮助。
如果B的get()
方法不是static
那么你需要一个B
的实例来调用这个方法;例如
B b = ....
b.get();
包的情况 无关 是真实的,并且 无关 你通过其他 类 的路径,等等。 (虽然我不确定我是否完全理解你对所有这些的描述 "prose" ...)
根据您的描述(没有代码),您需要访问 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
}
}
所以我有这个 class(我们称它为 "A")和这个 get()
方法,其中 returns 一个 class 字段,我想要从另一个 class ("B") 访问。 重要:两个 class 都是 abstract
。 这些 class 都在同一个 package
(package private
A
和 B
成员)。 Main
class 没有包(或者更好,默认包)。
[之前:扭曲且无用的描述]
我需要从 B
class 访问 A
的 get()
方法。
尝试过:
1) 非静态调用Aobj.get()
从位于main
的根对象开始,但似乎想要静态调用(奇怪,成员的none 是static
);
2) 试图静态访问它,但我得到了 Cannot make a static reference to the non-static field
错误(当然)。
...所以我被卡住了,仍然遇到访问语法错误,我尝试了两种方法。有什么建议吗?
编辑:
这样我就告一段落了。我现在将尝试解释我的错误。
基本上,问题是我想从 class 访问位于 Main
class(默认包)中的对象在一个包内。所以我遇到了可见性问题。
在其他情况下,我会解决导入 class,但我发现 you cannot import a class located in the default package,所以我创建了一个 main
包并导入 Main
class 在 B
class.
我一直犯的最严重的错误是认为我必须访问 main.main(String[])... etc ...Aobj
从 main
本身,这是一个非常非常糟糕的想法(仍然无法弄清楚我是怎么想的)
事实上,就像 Stephen C 指出的那样:
The is true irrespective of the situation with packages, and irrespective of the path you take through other classes.
最后,代码示例...老实说,现在的代码与我写这个问题的时候真的不一样了,老实说,我无法重现错误的情况,因为我不记得所有的错误我试图实现的逻辑。 (我的错。)我只希望这次能好好解释一下自己。
感谢大家的帮助。
如果B的get()
方法不是static
那么你需要一个B
的实例来调用这个方法;例如
B b = ....
b.get();
包的情况 无关 是真实的,并且 无关 你通过其他 类 的路径,等等。 (虽然我不确定我是否完全理解你对所有这些的描述 "prose" ...)
根据您的描述(没有代码),您需要访问 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
}
}