使用来自其他类的对象

时间:2016-01-29 14:05:30

标签: java android

我有mainActivity类和class1。在class1我有这样的东西

public void ownedAdd(int a)
{
    owned = owned +a;
}

简单。但是当我想在MainActivity中调用这个方法时

    Class1 obj1 = new Class1();
    Button button1 = (Button) findViewById(R.id.button1);

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            obj1.ownedAdd(10);
        }
    });

在这个地方我几乎没有问题。 Android Studio说obj1需要声明为final。我不喜欢那样。我想要做的是在main方法中使用class1对象。那可能吗?我想制作一些class1的对象,每个对象都有一些变量作为价格,拥有等等,我不知道如何。如有任何帮助,非常感谢;)

2 个答案:

答案 0 :(得分:0)

在JAVA中,除非变量在方法中声明为final,或者变量本身是父类的全局变量,否则在JAVA中无法访问方法中的变量到该方法中的匿名类。

要解决您的问题,请将obj1变量设置为全局变量。类似的东西:

public class MainActivity extends AppCompatActivity {
    //Declare the obj1 object here
    Class1 obj1;

   @Override
   public void onCreate(Bundle savedInstanceState) {
       //inflate layout and do other stuff

       //from where you posted
       obj1 = new Class1();
       Button button1 = (Button) findViewById(R.id.button1);

       button1.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               obj1.ownedAdd(10);
           }
       }); 
   }
}

答案 1 :(得分:0)

根据给定的代码,除了点击监听器之外,您不需要引用Class1实例,因此您可以简单地将其作为View.OnClickListener的成员变量:

   button1.setOnClickListener(new View.OnClickListener() {
       final Class1 obj1 = new Class1();

       @Override
       public void onClick(View v) {
           obj1.ownedAdd(10);
       }
   });

(虽然仍然值得最终决定)。

但是,它不是那么有用,因为只有点击监听器才能访问该实例 - 例如,您无法在另一个控件中显示该值。最简单的方法是制作当前的局部变量final