Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие альтернативы есть у instanceOf / 25 сообщений из 60, страница 1 из 3
22.11.2012, 14:07:43
    #38048730
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Есть абстрактный класс A
у него есть конкретные потомки A1 A2 A3
у клиента есть массив ссылок на A (соответственно там могут быть A1 A2 A3)
Я хочу произвести действия только над A1(например)
Просто слышал, что instanceOf - очень плохо использовать
...
Рейтинг: 0 / 0
22.11.2012, 14:35:37
    #38048789
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
instanceof зачастую это затычка, на месте которой лучше использовать полиморфизм (на то много причин, если очень нужно, можно попробовать перечислить).

Решается созданием метода в A, и соответствующей его реализацией-переопределением в A1.
...
Рейтинг: 0 / 0
22.11.2012, 14:44:10
    #38048811
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Добрый день, redwhite90!

> Есть абстрактный класс A
> у него есть конкретные потомки A1 A2 A3
> у клиента есть массив ссылок на A (соответственно там могут быть A1 A2 A3)
> Я хочу произвести действия только над A1(например)

Примерно так :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class A {
....
public void doAction() {
}
....
}


class A1 {
....
@Override
public void doAction() {
  realDoAction();
}
....


--
Алексей
JID: alxt@ya.ru


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.11.2012, 14:44:27
    #38048812
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90,

obj.getClass()==A1.class
A1.class.isInstance(obj)
...
Рейтинг: 0 / 0
22.11.2012, 14:49:47
    #38048826
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90Я хочу произвести действия только над A1(например)
по архитектуре)
http://www.sql.ru/forum/actualthread.aspx?tid=930725&pg=-1&hl=%f2%e8%ef%20%ea%eb%e0%f1%f1%e0
...
Рейтинг: 0 / 0
22.11.2012, 19:28:09
    #38049471
pasha701
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
...
Рейтинг: 0 / 0
22.11.2012, 23:40:37
    #38049691
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
GKS_Samara,
Не понял вашей идеи
...
Рейтинг: 0 / 0
22.11.2012, 23:42:51
    #38049692
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Blazkowicz,
У меня есть метод включить(абстрактный).
а я хочу чтобы у меня была возможность включить только приборы класса A1
...
Рейтинг: 0 / 0
22.11.2012, 23:49:07
    #38049699
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90Blazkowicz,
У меня есть метод включить(абстрактный).
а я хочу чтобы у меня была возможность включить только приборы класса A1
На абстрактном примере тут можно долго спорить. Раскрывайте конкретику.
Если у вас есть метод "включения". И "включать" можно только A1 из списка экземпляров А. То логичный вопрос, откуда вообще взялся список всего насвете, когда нужны только А1.
...
Рейтинг: 0 / 0
22.11.2012, 23:50:26
    #38049701
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Petro123,
не понял
...
Рейтинг: 0 / 0
22.11.2012, 23:53:14
    #38049705
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Blazkowicz,

есть класс прибор(абстрактный)
приборы делятся по категориям(наследуются от прибора).(световые, тепловые....)

ну вот и есть желание одним движением включить все световые или тепловые, то есть нужна проверка на принадлежность классу.

я реализовал через
Код: java
1.
.getClass().getName()
...
Рейтинг: 0 / 0
22.11.2012, 23:54:42
    #38049706
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
немножко команду напоминает внешне....но думаю слишком уж тут ее использовать
...
Рейтинг: 0 / 0
22.11.2012, 23:59:09
    #38049711
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90есть класс прибор(абстрактный)
приборы делятся по категориям(наследуются от прибора).(световые, тепловые....)

Где есть?

redwhite90ну вот и есть желание одним движением включить все световые или тепловые, то есть нужна проверка на принадлежность классу.

Не обязательно. Откуда берутся остальные приборы?

redwhite90.getClass().getName()

Без конкретики разговор ни о чем. Откуда приборы. Что такое "включить". Никто кроме вас не знает.
...
Рейтинг: 0 / 0
22.11.2012, 23:59:50
    #38049712
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90немножко команду напоминает внешне....но думаю слишком уж тут ее использовать
Команда нужна чтобы отделить отправителя и получателя и сделать их максимально независимыми. У вас такая задача?
...
Рейтинг: 0 / 0
23.11.2012, 00:06:42
    #38049717
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90Petro123,
не понял
там конкретный пример из жизни - выделить Особый класс из списка. Так ведь?

Изначально, нет смысла пихать ВСЕ в ОДИН список
"массив ссылок на A (соответственно там могут быть A1 A2 A3)"
чтобы потом ВЫДЕЛЯТЬ и ПРОВЕРЯТЬ кого то по его ФИО.

Так понятно?
- Сделай на клиенте 3 списка, чем использовать RTTI. Это ответ в лоб.
Так понятно?

Тебе сказали - нужна конкретика. Иначе = говнокод.
...
Рейтинг: 0 / 0
23.11.2012, 00:08:55
    #38049718
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Blazkowicz,

Все приборы(световые, тепловые....) наследуются от абстрактного прибора
все приборы хранятся в массиве типа прибор(абстрактный)
Как сделать так, чтобы пройдясь по массиву можно было запустить только один из предков
...
Рейтинг: 0 / 0
23.11.2012, 00:12:26
    #38049720
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Petro123,
Ну тогда надо делать три цикла или какой то композитный итератор, чтобы прогуляться по массиву, ради одного использования наверное оно того не стоит
...
Рейтинг: 0 / 0
23.11.2012, 00:27:25
    #38049729
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90Petro123,
Ну тогда надо делать три цикла или какой то композитный итератор, чтобы прогуляться по массиву, ради одного использования наверное оно того не стоит
Ну, если оно правда одно. То, да. Сделать и забыть. Если проект ещё годы развивать. То стоит подумать.
И конечно же гетерогенная коллекция всегда плохо.
...
Рейтинг: 0 / 0
23.11.2012, 09:25:51
    #38049916
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Добрый день, redwhite90!

> есть класс прибор(абстрактный)
> приборы делятся по категориям(наследуются от прибора).(световые,
> тепловые....)

Код: sql
1.
2.
3.
4.
5.
class Device {
.....
public void abstract turnOn();
public boolean abstract isLightDevice();
public boolean abstract isThermalDevice();



> ну вот и есть желание одним движением включить все световые или
> тепловые, то есть нужна проверка на принадлежность классу.

Код: sql
1.
2.
3.
for (Device device : deviceList)
  if (device.isLightDevice())
    device.turnOn();



> .getClass().getName()

Очень небезопасно к изменениям.

--
Алексей
JID: alxt@ya.ru


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.11.2012, 10:42:41
    #38050046
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90Есть абстрактный класс A
у него есть конкретные потомки A1 A2 A3
у клиента есть массив ссылок на A (соответственно там могут быть A1 A2 A3)
Я хочу произвести действия только над A1(например)
Просто слышал, что instanceOf - очень плохо использовать
Тут явно паттерн visitor, как и указал pasha701. Примерно такой клиентский код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void doSomething(A value) {
	// nothing
}

// определяем перегруженный метод только для A1 и наследников
void doSomething(A1 value) {
	// необходимые действия
	...
}

// ну и работа с массивом
for(A value:collectionOfA) {
	doSomething(value);
}
...
Рейтинг: 0 / 0
23.11.2012, 10:48:01
    #38050054
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
ivanraredwhite90Есть абстрактный класс A
у него есть конкретные потомки A1 A2 A3
у клиента есть массив ссылок на A (соответственно там могут быть A1 A2 A3)
Я хочу произвести действия только над A1(например)
Просто слышал, что instanceOf - очень плохо использовать
Тут явно паттерн visitor, как и указал pasha701. Примерно такой клиентский код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void doSomething(A value) {
	// nothing
}

// определяем перегруженный метод только для A1 и наследников
void doSomething(A1 value) {
	// необходимые действия
	...
}

// ну и работа с массивом
for(A value:collectionOfA) {
	doSomething(value);
}



Работать не будет, doSomething(A value) будет всегда вызываться. Вот этого метода doSomething(A value) и не должно быть.
...
Рейтинг: 0 / 0
23.11.2012, 10:49:03
    #38050059
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
redwhite90,
12519420
Может и не стоит. Тебе дали все возможные варианты начиная от костыля.
...
Рейтинг: 0 / 0
23.11.2012, 11:39:14
    #38050171
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
Blazkowiczinstanceof зачастую это затычка, на месте которой лучше использовать полиморфизм (на то много причин, если очень нужно, можно попробовать перечислить).очень нужно, взял блокнот
...
Рейтинг: 0 / 0
23.11.2012, 11:59:05
    #38050205
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
0FDРаботать не будет, doSomething(A value) будет всегда вызываться. Вот этого метода doSomething(A value) и не должно быть.

Согласен, написал чересчур коротко и как следствие неточно. Вот рабочий пример
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
// тут желательно определить интерфейсы, пропущено для краткости
class A {
	void accept(Visitor visitor) {
		visitor.doSomething(this);
	}
}
class Visitor{
	void doSomething(A value) {
		//nothing
	}
	void doSomething(A1 value) {
		System.out.println("A1");
	}
}
class A1 extends A{
	void accept(Visitor visitor) {
		visitor.doSomething(this);
	}
}
class A2 extends A{}
public class TestCase {
	public static void main(String[] args) {
		Visitor visitor = new Visitor();
		A[] values = {
			new A1(),
			new A2()
		};
		for(A value:values) {
			value.accept(visitor);
		}
	}
}


Весь фокус в перегрузке методов в Visitor и переопределении accept в нужных классах
...
Рейтинг: 0 / 0
23.11.2012, 12:19:11
    #38050248
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие альтернативы есть у instanceOf
ivanra,
Визитор не убирает необходимость проверки особого класса или объекта. Он просто убирает все проверки в лапше-коде внутрь одного класса.
Т.е решений всего 2. Либо особые флажки в модели либо RTTI
IMHO
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие альтернативы есть у instanceOf / 25 сообщений из 60, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]