获取另一个类的非静态属性
Posted
技术标签:
【中文标题】获取另一个类的非静态属性【英文标题】:Get non static attribute of another class 【发布时间】:2015-12-12 05:33:48 【问题描述】:所以我有一个具有 int 属性的类不能是静态的:
public class GetterId
int id = 42;
public int getId()
return id;
public void setId(int id)
this.id = id;
我想从另一个类访问这个“id”属性,比如:
public class MainActivity
int id_bis;
id_bis = GetterID.getId();
但不能这样,因为 getId() 方法和 GetterId 类中的属性是非静态的...
这个问题有解决办法吗?
【问题讨论】:
这个问题没有意义。该类没有任何非静态属性。只有实例有这些。你想要属性,你需要一个实例。 【参考方案1】:在 MainActivity 类中创建 GetterId 类的对象。使用此对象,您可以访问 GetterId 类的变量和方法。
GetterId object = new GetterId();
object.getId();
object.setId(34);
int id = object.id;
【讨论】:
如果 MainActivity 和 GetterId 类在不同的包中怎么办? 只导入类的包名。看到这个线程***.com/questions/3480389/… 您提供的参考涉及公共方法。供参考:Controlling Access to Members of a Class 和 Isn't “package private” member access synonymous with the default (no-modifier) access?【参考方案2】:您必须创建一个 GetterId 类型的对象,然后从该对象调用 getId。
GetterId obj = new GetterId();
obj.getId();
这是因为您的 id 必须与一个对象相关联,因为每个对象都可以有不同的 id。我想这就是为什么你有一个 id 的 setter 函数。因此,要让您的程序检索正确的 id,它必须具有对 GetterId 类型对象的引用。
【讨论】:
但是如果我想获取 id 的值而不是对象本身呢? 要获取 id,您必须有一个GetterId
的实例才能调用 getId()
,假设您的课程设置与您的问题一样。
@Chris 然后你必须让它静态。除非您将其设为静态,否则没有其他方法可以在不创建对象的情况下访问值。静态意味着该类中的所有对象共享相同的值,这就是您可以通过类名访问它的原因。但是,如果每个对象都有自己的值,那么您必须通过对象本身来访问它,否则它将无法为您提供正确的值。【参考方案3】:
您可以创建一个单例类并使用 getInstance 来获取该对象的实例
示例:
public final class GetterId
private static GetterId instance;
private GetterId()
public static GetterId getInstance()
if (instance == null)
synchronized (GetterId.class)
if (instance == null)
instance = new GetterId();
return instance;
然后,只要您需要引用该对象,只需调用
GetterId getter = GetterId.getInstance()
id_bis = getter.getId();
这应该给你相同的参考,你可以正常使用该对象
【讨论】:
以上是关于获取另一个类的非静态属性的主要内容,如果未能解决你的问题,请参考以下文章