2015-09-15 50 views
0

所以我有一个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类的属性都是非静态的不能是这个样子......

有没有解决这个问题的方法?

+0

这个问题没有道理。该类没有任何非静态属性。只有实例有这些。你想要的属性,你需要一个实例。 – EJP

回答

0

您必须创建一个GetterId类型的对象,然后从该对象中调用getId。

GetterId obj = new GetterId(); 
    obj.getId(); 

这是因为您的ID必须与某个对象关联,因为每个对象都可以具有不同的ID。我想这就是为什么你有一个id的setter函数。因此,为了让您的程序检索正确的ID,必须对GetterId类型的对象进行引用。

+0

但是如果我想获得id的值而不是对象本身的值呢? – Chris

+1

为了得到id,你必须有一个'GetterId'的实例来调用'getId()',假设你的类被设置为像你的问题那样。 –

+0

@Chris然后你必须把它变成静态的。除非将其设为静态,否则没有其他方式可以在不创建对象的情况下访问值。静态意味着来自该类的所有对象共享相同的值,这就是为什么您可以通过类名访问它的原因。但是如果每个对象都有自己的值,那么你必须通过对象本身来访问它,否则它将无法给你正确的值。 – Amr

1

MainActivity类来创建GetterId类的对象。通过此对象,您可以访问类的变量和方法。

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

如果MainActivity和GetterId类在不同的包中,该怎么办? – Onik

+0

只是导入类的包名称。看到这个线程http://stackoverflow.com/questions/3480389/java-how-to-use-classes-in-other-package –

+0

你提供的参考处理公共方法。有关参考:[控制对类的成员的访问](https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)和[不是“包私人”成员访问与默认(无修饰符)访问?](http://stackoverflow.com/questions/5416074/isnt-package-private-member-access-synonymous-with-the-default-no-modifier) – Onik

0

你可以创建一个单独的类和使用的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(); 

这应该给你相同的参考无处不在,你也可以使用该对象mal

相关问题