powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильное наследование
17 сообщений из 17, страница 1 из 1
Правильное наследование
    #37813018
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть интерфейс
Код: java
1.
2.
3.
4.
5.
  public interface ICommon {

    void setDataTab(A a);

  }



Есть классы которые его наследуют от 1 до N, Назовем их

Example1
Example2
Example3
...
ExampleN

Бин A с базовыми методами и его наследники от 1 до X

A1
A2
A3
...
AX

Вопрос как узнать какой наследник установлен в методе setData Examplу

Код: java
1.
Example20.setData(A13);



писать
Код: java
1.
if A instanseOf A1 then{} else if A instanseOf A2



Будет не красиво, как дслеать это правильно?
...
Рейтинг: 0 / 0
Правильное наследование
    #37813050
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так ещё можно. Не понятно только зачем.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
        Circle A = new Ball(w, h, MIN_X, MIN_Y, Color.AQUA);
        if(A.getClass() == Circle.class) {
            System.out.println("Это печататься не будет.");
        }
        
        if(A.getClass() == Ball.class) {
            System.out.println("Не красиво названия переменных с большой буквы писать.");
        }
...
Рейтинг: 0 / 0
Правильное наследование
    #37813244
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оператор instanceof d вашем случае всегда будет возвращать true , поскольку опирается не на тип ссылки, а на свойства объекта, на который она ссылается.
...
Рейтинг: 0 / 0
Правильное наследование
    #37813359
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanov-voidОператор instanceof d вашем случае всегда будет возвращать true , поскольку опирается не на тип ссылки, а на свойства объекта, на который она ссылается.
По-моему вопрос и был о свойствах объекта.
...
Рейтинг: 0 / 0
Правильное наследование
    #37814156
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkВот так ещё можно. Не понятно только зачем.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
        Circle A = new Ball(w, h, MIN_X, MIN_Y, Color.AQUA);
        if(A.getClass() == Circle.class) {
            System.out.println("Это печататься не будет.");
        }
        
        if(A.getClass() == Ball.class) {
            System.out.println("Не красиво названия переменных с большой буквы писать.");
        }



Избежать хотел if

Может паттерн есть, которого я незнаю =(((
...
Рейтинг: 0 / 0
Правильное наследование
    #37814203
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь вам надо понять только один момент - при правильном проектировании вам НИКОГДА не будет надо узнавать, что реально стоит за интерфейсом. НИКОГДА. Вот и все, на этом можно закрывать топик
...
Рейтинг: 0 / 0
Правильное наследование
    #37814369
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomЗдесь вам надо понять только один момент - при правильном проектировании вам НИКОГДА не будет надо узнавать, что реально стоит за интерфейсом. НИКОГДА. Вот и все, на этом можно закрывать топик
В принципе +1. Зачем вам выносить логику зависящую от типа объекта из самого объекта? Если есть какая то логика, которая запускаться в зависимости от типа - вам всего лишь надо ввести этот метод в интерфейс иерархии и переопределить его там где нужно, остальное дело возьмет на себя полиморфизм. Единственное исключение - это когда у вас нет контроля над исходным кодом - в этом случае используйте паттерны вроде Visitor
...
Рейтинг: 0 / 0
Правильное наследование
    #37814435
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь вам надо понять только один момент - при правильном проектировании вам НИКОГДА не будет надо узнавать, что реально стоит за интерфейсом. НИКОГДА. Вот и все, на этом можно закрывать топик
Как надо было правильно проектировать JDBC?
http://docs.oracle.com/javase/6/docs/api/java/sql/Wrapper.html#unwrap%28java.lang.Class%29
...
Рейтинг: 0 / 0
Правильное наследование
    #37814444
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБудет не красиво, как дслеать это правильно?
По-моему, вполне нормально.
...
Рейтинг: 0 / 0
Правильное наследование
    #37814498
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪЗдесь вам надо понять только один момент - при правильном проектировании вам НИКОГДА не будет надо узнавать, что реально стоит за интерфейсом. НИКОГДА. Вот и все, на этом можно закрывать топик
Как надо было правильно проектировать JDBC?
http://docs.oracle.com/javase/6/docs/api/java/sql/Wrapper.html#unwrap%28java.lang.Class%29

Вот не надо смешивать теплое с мягким, по-моему из контекста ясно было, что иерархия дана изначально. Да и ваш пример с jdbc - ну и где там instanceof? Да, есть небольшие сложности связанные с инициализацией объекта, обусовленные плагинной архитектурой, а после того как объект создан - работа идет через интерфейс, опять же никаких instanceof
...
Рейтинг: 0 / 0
Правильное наследование
    #37814779
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и ваш пример с jdbc - ну и где там instanceof?
Как раз метод unwrap нужен, чтобы можно было получить соединение и сделать по нему instanceof. Например, приложение может работать с несколькими СУБД. Получаем connection, делаем instanceof, и если окажется, что имеем дело с Ораклом, то включаем Oracle Client Result Cache.
...
Рейтинг: 0 / 0
Правильное наследование
    #37814820
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪДа и ваш пример с jdbc - ну и где там instanceof?
Как раз метод unwrap нужен, чтобы можно было получить соединение и сделать по нему instanceof. Например, приложение может работать с несколькими СУБД. Получаем connection, делаем instanceof, и если окажется, что имеем дело с Ораклом, то включаем Oracle Client Result Cache.

так это и есть пример неправильной архитектуры. ЖДБЦ задумывался как единый интерфейс к разным базам данных. Цели достич не удалось (неважно кто виноват) и приходится использовать костыли в виде выяснения с каким сервером идёт работа и написания разного кода для разных скл-серверов.
...
Рейтинг: 0 / 0
Правильное наследование
    #37814827
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, 1024!

> так это и есть пример неправильной архитектуры. ЖДБЦ задумывался как
> единый интерфейс к разным базам данных. Цели достич не удалось (неважно
> кто виноват) и приходится использовать костыли в виде выяснения с каким
> сервером идёт работа и написания разного кода для разных скл-серверов.

Именно!
Явы со стандартными библиотеками прекрасный пример не только того, как
надо делать, но и (местами) как НЕ надо делать.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильное наследование
    #37814829
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪДа и ваш пример с jdbc - ну и где там instanceof?
Как раз метод unwrap нужен, чтобы можно было получить соединение и сделать по нему instanceof. Например, приложение может работать с несколькими СУБД. Получаем connection, делаем instanceof, и если окажется, что имеем дело с Ораклом, то включаем Oracle Client Result Cache.0_о Ваш юскейс меня немного шокирует, если честно :)
Нормальная работа через JDBC - это работа с интерфейсами JDBC. Никакого анврапа быть не должно. Но то JDBC и был придуман - чтобы абстрагировать пользователя от деталей реализации курсоров и прочей СУБД-лабудени.
Анвраппинг требуется только в крайне редких случаях и то, для того что бы использовать какую-либо сугубо специализированную фишку того или иного драйвера. Сам факт наличия необходимости анврапить JDBC-объекты с вероятностью 99% говорит о кривом дизайне.
...
Рейтинг: 0 / 0
Правильное наследование
    #37814847
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, svenom!

> Но то JDBC и был придуман - чтобы абстрагировать
> пользователя от деталей реализации курсоров и прочей СУБД-лабудени.

А ещё от вкусностей конкретных БД. Оно, конечно, хорошо, что можно об
этом не думать. Но жаль, что об этом так тяжело думать.

В delphi тоже сначала BDE сделали- похоже, кстати, на JDBC.
А потом пошли DOA, IBX и прочее. И победили.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильное наследование
    #37814905
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraА ещё от вкусностей конкретных БД. Оно, конечно, хорошо, что можно об
этом не думать. Но жаль, что об этом так тяжело думать.

В delphi тоже сначала BDE сделали- похоже, кстати, на JDBC.
А потом пошли DOA, IBX и прочее. И победили.

Верно, любая абстракция подразумевает под собой снижение детализации. Так происходит на уровнях СУБД-JDBC, то же самое происходит на уровне JDBC-Hibernate и т.д.. Это сознательное решение - простота в обмен на "фиченасыщенность".
Следующий момент - про какие фичи вообще идет речь? Большинство "вкусностей" в реальной жизни лежит на уровне SQL-запросов, и лишь мааааалая толика чего-то стоящего может бы получена путем ковыряния внутри сознательно(!!!) скрытых внутренностей JDBC-драйвера. Так что мы тут уходим в сторону расуждений о каких-т окрайне редких и муторных ситуаций, корнер-кейсов, которые по сути лишь подтверждают правило, что надо стремиться всецело работать через те интерфейсы, которые даны прикладному разработчику, а не ковырять кишки закрытого кода.
...
Рейтинг: 0 / 0
Правильное наследование
    #37814985
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024Цели достич не удалось (неважно кто виноват) и приходится использовать костыли в виде выяснения с каким сервером идёт работа и написания разного кода для разных скл-серверов.А где-то есть другой вариант?
Без костылей и написания разного кода?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильное наследование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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