如何从没有静态关键字的其他类访问公共变量

时间:2015-08-10 08:24:43

标签: android

这是A类

public ClassA {
public ArrayList<AppDetail> apps;}

这里是B类,我必须访问B类中没有静态关键字的公共方法“apps”。

public class AppsListActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_apps_list);

}}

4 个答案:

答案 0 :(得分:1)

这取决于您在apps中填充数据的方式。通常,您将在ClassA中创建ClassB的实例,并使用getter / setter方法来调整值:

public ClassA {
    private ArrayList<AppDetails> apps;

    public ClassA() {
        apps = new ArrayList<>();
    }

    public ClassA(ArrayList<AppDetails> apps) {
        if (apps != null) {
            this.apps = apps;
        } else {
            this.apps = new ArrayList<>();
        }
    }

    public void setApps(ArrayList<AppDetails> apps) {
        this.apps = apps;
    }

    public ArrayList<AppDetails> getApps() {
        return apps;
    }

然后在ClassB中创建一个实例:

ClassA classA = new ClassA();

并在classA上使用getter / setters方法。

但是,如果要在单独的ClassA中创建Activity实例以便从那里检索数据,则此方法将不起作用,因为存储在一个实例中的任何数据都不会出现在ClassB中创建的新内容中。

答案 1 :(得分:1)

未标记为static的变量称为实例变量实例字段。顾名思义,您需要该类的实例才能访问它。您可以像这样创建一个ClassA实例:

ClassA a = new ClassA();

然后您可以像这样访问它:

a.apps

但是,建议不要标记变量/字段public。你应该标记它private并编写一个getter方法和一个setter方法(可选)来访问它或设置它的值:

//getter
public ArrayList<AppDetails> getApps () {
    return apps;
}

//setter
public void setApps (ArrayList<AppDetails> apps) {
    this.apps = apps;
}

答案 2 :(得分:1)

如果A类是POJO(普通旧Java对象),您可以实例化它并提供getter和setter。

ClassA.java

public ClassA {
   public ArrayList<AppDetail> apps;

   public ArrayList<AppDetail> getApps(){
      // other codes....
      return this.apps;
   }

   public void setApps(ArrayList<AppDetail> apps){
      // other codes....
      this.apps = apps;
   }
}

来自其他班级:

ClassA classA = new ClassA();
// some codes....
// classA.getApps(); //  returns the value of apps for classA instance

答案 3 :(得分:0)

如果需要,创建一个构造函数。并调用类似

的内容
ClassA a = new ClassA();

并用作:

a.apps;