获取另一个类的非静态属性

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();

这应该给你相同的参考,你可以正常使用该对象

【讨论】:

以上是关于获取另一个类的非静态属性的主要内容,如果未能解决你的问题,请参考以下文章

static关键字

static 关键字

28-关键字:static

访问静态成员函数中的非静态成员的解决方法

Java关键字-static

java中static静态变量大小