2015-09-15 3 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(); 

Это связано с тем, что ваш идентификатор должен быть связан с объектом, поскольку каждый объект может иметь другой идентификатор. Я думаю, именно поэтому у вас есть функция setter для id. Поэтому для вашей программы для получения правильного идентификатора она должна иметь ссылку на объект типа GetterId.

+0

Но что, если я хочу получить значение id, а не самого объекта? – Chris

+1

Чтобы получить идентификатор, вы должны иметь экземпляр 'GetterId' для вызова' getId() 'on, предполагая, что ваш класс настроен так, как в вашем вопросе. –

+0

@Chris Затем вы должны сделать его статическим. Нет другого способа получить доступ к значению без создания объекта, если вы не сделаете его статичным. Static означает, что все объекты из этого класса имеют одинаковое значение, поэтому вы можете получить к нему доступ через имя класса. Но если каждый объект имеет свое значение, тогда вам нужно получить к нему доступ через сам объект, иначе он не сможет дать вам правильное значение. – Amr

1

Создать объект из класса GetterId в 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) и [Не является ли доступ к члену «закрытый пакет» синонимом default (no-modifier)?] (http://stackoverflow.com/questions/5416074/isnt-package-private-member-access-synonymous-with-the-default-no-modifier) ​​ – Onik

0

вы могли бы создать класс одноплодного и использовать деЫпзЬапс, чтобы получить экземпляр этого объекта

пример:

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

Смежные вопросы