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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование методов 
:(
    Опции темы
Reptor
Дата 16.7.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



Вопрос таков: есть у меня несколько методов (сейчас они описаны просто в главном классе) и вызываются во вложеном классе. Я етот класс хочу вынести как отдельный и наследовать свой главный я уже не смогу. Так вот как мне можно луче вынести эти методы (это можно сказать не логика но очень выжная настройка некоторых возможностей) что б они были доступны отовсюду. Просто не хочу делать это отдельным классом так как по сути экземпляр там создавать несчего (это просто можно сказать набор функций). Как грамотно решить эту проблему? 
PM MAIL ICQ   Вверх
powerOn
Дата 16.7.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(Reptor @  16.7.2007,  15:30 Найти цитируемый пост)
Просто не хочу делать это отдельным классом так как по сути экземпляр там создавать несчего (это просто можно сказать набор функций).

как самый простой вариант -  вынести методы в отдельный класс и сделать их статическими.


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 1
Всего: 11



Цитата(powerOn @  16.7.2007,  13:39 Найти цитируемый пост)
как самый простой вариант -  вынести методы в отдельный класс и сделать их статическими.


или сингелтон

PM MAIL ICQ   Вверх
Reptor
Дата 17.7.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



Цитата

как самый простой вариант -  вынести методы в отдельный класс и сделать их статическими.

powerOn, это ж всеровно прийдётся создавать экземпляр или я что то недопонял.

Цитата

или сингелтон


А что такое сингелтон?


PM MAIL ICQ   Вверх
Domestic Cat
Дата 17.7.2007, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Код

static class Helpers
{
      public static int GetInt(Object obj) { ... }
}


.....

int i = Helpers.GetInt(obj);



--------------------

PM   Вверх
hamsterKSU
Дата 17.7.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 1
Всего: 11



в случае класса со статическими методами тебе не придется создавать класс. сампл такого класса привел Domestic Cat.
в случае сингелтона тебе придется создать класс всего один раз - принцип этого патерна. 
пример сингелтона
Код

class A{

 private static A instance;

 private A(){}

 public A instance(){

   if(instance==null)
      instance = new A();
   return instance;
 }

}

PM MAIL ICQ   Вверх
Maksym
Дата 17.7.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Если методы не требуют хранения каких-то глобальных состояний, то синглетон не нужен.
Если же требуют, и при этом к коду возможен доступ из разных потоков, методы или состояния нужно будет засинхронизировать.
PM MAIL   Вверх
Reptor
Дата 17.7.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



Мне необходимо хранить глобальные переменные (к примеру там какието глобальные настройки которые часто используются ) они у меня сейчас вечно передаются в конструктора и там делаю новую переменную глобальную для этого класса а не всего проекта (как то глупо получается). Я могу в статическиом классе их объявить а потом просто использовать что б не передавать в конструкторы? 
PM MAIL ICQ   Вверх
chief39
Дата 17.7.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


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

Репутация: 15
Всего: 77



Цитата(Reptor @  17.7.2007,  17:14 Найти цитируемый пост)
Мне необходимо хранить глобальные переменные (к примеру там какието глобальные настройки которые часто используются ) они у меня сейчас вечно передаются в конструктора и там делаю новую переменную глобальную для этого класса а не всего проекта (как то глупо получается). Я могу в статическиом классе их объявить а потом просто использовать что б не передавать в конструкторы?  

Если тебе нужны глобальные для всего приложения переменные - делай их 
Код

public static fina
l
в хелпере
и в секции 
Код

static{

}


инициализируй


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Reptor
Дата 17.7.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



я что то не совсем понял как хочет сделать chief39
PM MAIL ICQ   Вверх
chief39
Дата 17.7.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


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

Репутация: 15
Всего: 77



Код

class Helpers
{
      public static int GetInt(Object obj) { return 8; }


    public static final int MY_GLOBAL_VARIABLE_1;
    public static final int MY_GLOBAL_VARIABLE_2;
    public static final String MY_GLOBAL_VARIABLE_3;
    
    static{
        MY_GLOBAL_VARIABLE_1 = 5;
        MY_GLOBAL_VARIABLE_2 = (int)System.currentTimeMillis(); // тут не совсем плохо - лонг обрезаем до инта - просто сама идея
        MY_GLOBAL_VARIABLE_3 = System.getProperty("JAVA_HOME"); // короче, берёшь откуда угодно
    }
    
    
    
    // TEST
    public static void main(String[] args) {
        
        int i = Helpers.GetInt(new Object());
        int i1 = Helpers.MY_GLOBAL_VARIABLE_1;
        int i2 = Helpers.MY_GLOBAL_VARIABLE_2;
        String java_home = Helpers.MY_GLOBAL_VARIABLE_3;
    }
}

мдодифицировал домашнего кота


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
niasilil
Дата 20.7.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 9



или просто использовать static import


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
Reptor
Дата 20.7.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



я вот попробывал реализовать то что посоветовал Domestic Cat, так же нельзя объявлять класс как static.

И поэтому сразу вопрос. Зделав так как сказал chief39, собственно чем этот класс отличается от обычного?
Ведь если я зделаю методы static в любом классе я их буду видить. Даже в этом классе что они у меня сейча. В чём тогда отличие класса chief39, от других? И там есть void main(String[] args) зачем она? Я что то совсем потерялся как правельно всё это вынести?
PM MAIL ICQ   Вверх
Domestic Cat
Дата 20.7.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(Reptor @  20.7.2007,  08:55 Найти цитируемый пост)
Domestic Cat, так же нельзя объявлять класс как static.


Извиняюсь, привык к шарпу.



--------------------

PM   Вверх
chief39
Дата 20.7.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


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

Репутация: 15
Всего: 77



Цитата(Reptor @  20.7.2007,  17:55 Найти цитируемый пост)
И поэтому сразу вопрос. Зделав так как сказал chief39, собственно чем этот класс отличается от обычного?

Ничем. Суть в самих переменных и способе инициализации. Запихать - в любой класс.

Цитата(Reptor @  20.7.2007,  17:55 Найти цитируемый пост)
Ведь если я зделаю методы static в любом классе я их буду видить.

Да.
Но.
Обычно такие константы выносят в отдельный класс и так его называют - типа GlobalConstants или типа того smile
Чтоб в одном месте хранить и править. Если эта переменная тоьлко в одном классе нужна - можешь её там запулить, а не в этих глобалах

Цитата(Reptor @  20.7.2007,  17:55 Найти цитируемый пост)
Даже в этом классе что они у меня сейча. В чём тогда отличие класса chief39, от других?

Ни в чём. Класс как класс. Обычный. суьт, опять-таки - в переменных и способе инициализации.

А то, что переменные статик позволяет делать

Код

Helpers.MY_GLOBAL_VARIABLE_1


вместо 
Код

Helpers hlp = new Helpers();
int i = hlp.MY_GLOBAL_VARIABLE_1;


То есть экземпляр класса(объект) не надо создавать для обращеиня к переменным этим.

Цитата(Reptor @  20.7.2007,  17:55 Найти цитируемый пост)
И там есть void main(String[] args) зачем она? Я что то совсем потерялся как правельно всё это вынести? 

Это всего лишь для запуска.
Чтоб не создаваьт новый класс и уже из него показывать как доступаться к этим переменным, сделал метод для теста этих переменных.
Точно так же будешь обращаться из своих других объектов любых классов. 
<имя_класса>.<имя_переменной>


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

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

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

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


 




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


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

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