2015-09-15 86 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

相關問題