Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к переменным, static против singleton 
:(
    Опции темы
Antropoid
Дата 16.12.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 2
Всего: 16



Какой код корректнее?
I
Код

class MyClass {
    public static String str = "Hello";
}

class AnotherClass {
//    ...
    System.out.println(MyClass.str);
//    ...
}


II
Код

class MyClass {
    private static MyClass instance;

    public String str = "Hello";

    public static MyClass getInstance() {        
    return instance;
    }
}

class AnotherClass {
//    ...
    System.out.println(MyClass.getInstance().str);
//    ...
}


В коде I обращаемся к переменной str так:
MyClass.str, в коде II так - MyClass.getInstance().str. 
Какой из этих способов доступа предпочтительнее?

Это сообщение отредактировал(а) Antropoid - 16.12.2006, 12:02


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
powerOn
Дата 16.12.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Если str меняться не должна, то так потянет:
Код

class MyClass {
    public final static String str = "Hello";
}


Смысл второго примера я не понял.

Можно еще так:
Код

class MyClass {
    private static String str = "Hello";
    
    public static String getStr() {
        return str;
    }
}



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Antropoid
Дата 16.12.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 2
Всего: 16



Цитата(powerOn @  16.12.2006,  12:49 Найти цитируемый пост)
Смысл второго примера я не понял.

Как другим классам обращаться к переменным класса MyClаss, не имея объекта не него?

Это сообщение отредактировал(а) Antropoid - 16.12.2006, 13:03


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
y3u
Дата 16.12.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 5
Всего: 13



не совсем корректный пример... строка она вроде как считается имьютабл, а если еще вспомнить про пул строк, то тогда что так что эдак пофигу... для строк лияно я использую public static final филды... если объекты изменяемые - тогда надо подумать как они буду изменяться и сколько экземпляров класса должно быть, от этого и плясать...


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
Antropoid
Дата 17.12.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 2
Всего: 16



Цитата(y3u @  16.12.2006,  14:52 Найти цитируемый пост)
что так что эдак пофигу

Ну разве нормально из других классов обращаться к полям класса посредством MyClass.str, если объект класса MyClass будет единственным в программе? С другой стороны такое обращение облегчает чтение кода.  Реализация же шаблона синглетон для доступа к переменным - громоздка...


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
y3u
Дата 17.12.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 5
Всего: 13



Цитата(Antropoid @  17.12.2006,  22:38 Найти цитируемый пост)
Ну разве нормально из других классов обращаться к полям класса посредством MyClass.str


касательно строк - да, нормально. Я даже написал почему smile Ибо строки - это до некоторой степени неизменяемый объект... Так что это нормально - положить public static final константы, чтобы ими пользоваться при нужде минуя создание инстанса объекта, на то они и константы... Если внутри объекта присутствуют изменяемые поля, то наружу их вытаскивать крайне нежелательно, хотя есть случаи когда наоборот удобнее вытащить, к примеру класс ThreadLocal. А синглтон/не синглтон, тут надо решать исходя из задачи...


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
0000
Дата 19.12.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: нет
Всего: 5



singleton тут не нужен...если ты хочешь дать доступ всем к строке - оставь static...
второй код абсолютно некорректен - ты там возвращаешь класс...но он у тебя не одиночка..смысла в нем нет
PM MAIL ICQ   Вверх
Antropoid
Дата 20.12.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 2
Всего: 16



Цитата(0000 @  19.12.2006,  12:12 Найти цитируемый пост)
второй код абсолютно некорректен

Цитата(powerOn @  16.12.2006,  12:49 Найти цитируемый пост)
Смысл второго примера я не понял.

Извиняюсь, второй пример звучит так:
Код

class MyClass {
    private static MyClass instance;
    MyClass() {
           instance = this;//<-----СОВСЕМ ЗАБЫЛ!!!
    }


    public String str = "Hello";

    public static MyClass getInstance() {        
        return instance;
    }
}

class AnotherClass {
//    ...
    System.out.println(MyClass.getInstance().str);
//    ...
}

Надеюсь теперь ответы изменятся...


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
powerOn
Дата 20.12.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(Antropoid @  20.12.2006,  22:07 Найти цитируемый пост)
Надеюсь теперь ответы изменятся... 

 А когда конструктор будет вызван? 



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
y3u
Дата 20.12.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 5
Всего: 13



ты наверное имел в виду примерно следующее... но это не всегда правильно
Код


public class MyClass {
    private static final MyClass INSTANCE = new MyClass();
    
    private MyClass() {
    }

    public static MyClass getInstance() {        
        return INSTANCE;
    }

...


ты, во-первых, реши сначала, зачем тебе синглтон... во-вторых можно почитать про его реализации вразных случаях...
к примеру вот здесь

а касательно статических полей все уже написали, если неизменяемый филд, то public static final, если изменяемый, то через объект и через паблик геттер...

Это сообщение отредактировал(а) y3u - 20.12.2006, 22:54


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.