2015-01-26 3 views
2

В настоящее время у меня есть родительский класс, который имеет два подкласса и что я, по сути, хочу сделать, это наследование их общей переменной (float). Мне нужно установить значение float в подклассе1, а затем использовать значение float в подклассе2. Я должен добавить, что это все действия Android и что подкласс1 находится в начале цепочки действий, а подкласс2 находится в конце этой цепочки, все действия между ними также являются дочерними элементами одного и того же родительского класса.Общие переменные в подклассах в java

То, что я в настоящее время есть что-то похожее на следующее: (я оставил много другого кода из это только голые кости)

class activityParent extends Activity{ 
    public static float value; 

    public void setValue(){ 

     //grab the value from phone (ill leave this code out and will hardcode a value below as an example) 
     value = 0.6f; 
    } 

    public void useValue(){ 
     //where i use the value in another function here 
     otherFuncion(value); 
    } 

} 

class subclass1 extends activityParent 
{ 
    @Override 
    public void onCreate(Bundle bundle){ 
     setValue();//need this to be initialized first 
     super.onCreate(bundle); 

    } 
} 

class subclass2 extends activityParent{ 
    //some previous code here 
    //i need to use the value just before the activity finishes 
    useValue(); 
    finish(); 

} 

Это всплывают значение никогда не используется нигде ,

Этот подход кажется неправильным, и я это знаю, но я не уверен, как это осуществить.

Я думал о передаче данных с намерениями, но, как уже упоминалось, два подкласса arent в прямом контакте друг с другом, theres ряд действий между ними, и я бы предпочел не передавать эти данные через них все, чтобы достичь конец.

+0

Я знаю, что это, вероятно, не очень хорошая практика, но вы можете записать значение в файл и прочитать его в другом действии. – iWumbo

+0

Я не вижу проблемы подхода. У вас есть статическая переменная, и вы можете получить доступ к ней из любого места и в любое время без перехода к какой-либо деятельности. Или, может быть, ваш вопрос недостаточно ясен! –

+2

Согласен с @NguyenDoanTung. Если вы считаете, что зло имеет статические поля, я бы предложил использовать один контейнер данных класса Singleton или использовать SharedPreferences (простейшее постоянное хранилище в Android) для хранения и получения значения. –

ответ

0

Вопросы, описанные в ниже, часто встречаются.

How do I pass data between Activities/Services within a single application?

В идеале, так как вы хотите поделиться примитивных данных типа (с плавающей точкой), Намерение рекомендуется. Но так как это не соответствует вашим требованиям, вы можете пропустить это.

Далее, использование «статического» (которое вы сейчас делаете) также прекрасное. Вы можете получить доступ к этим статическим полям из любого другого класса вашего приложения.

Но, если вы хотите иметь альтернативный вариант, тогда может использоваться класс «Singleton». Это класс, который имеет только один экземпляр.

public class Singleton { 
    private static Singleton INSTANCE ; 

    private Singleton() {} 

    public static synchronized Singleton getInstance() { 
     if(INSTANCE == null){ 
      INSTANCE = new Singleton(); 
     } 
     return INSTANCE; 

    } 
} 

У этого объекта есть статический метод с именем, таким как getInstance(), который возвращает экземпляр; при первом вызове этого метода создается глобальный экземпляр.

Например, подкласс класса 1 может извлекать экземпляр и вызвать setValue (0.6); более поздний подкласс класса 2 может извлечь экземпляр и вызвать getValue() для извлечения последнего установленного значения.

+0

Ваш синглтон не будет хорошо играть с многопоточным движением. –

0

Будьте очень осторожны с каскадом классов. onCreate()SubClass1 вызывает super.onCreate(), который является onCreate() от ActivityParent. Это может вызвать цепную реакцию (намерение, вызывающее ActivityParent, по-прежнему доступно для onCreate()).

+0

Это должен быть комментарий. –

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