【问题标题】: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 类中的属性是非静态的...

这个问题有解决办法吗?

【问题讨论】:

  • 这个问题没有意义。该类没有任何非静态属性。只有实例有这些。你想要属性,你需要一个实例。

标签: java android


【解决方案1】:

MainActivity 类中创建 GetterId 类的对象。使用此对象,您可以访问 GetterId 类的变量和方法。

GetterId object = new GetterId();
object.getId();
object.setId(34);
int id = object.id;

【讨论】:

【解决方案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();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2011-06-11
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多