2015-06-11 3 views
0

Как определить класс объекта в Java?Как определить класс объекта в Java?

класса В и класса С расширить класс А. Это реализация метода в классе D называется dmethod (объект В или С) , за исключением того, его единственным параметром, который может быть объектом B или C.

методы могут быть телефонные

  1. dmethod (B объект)
  2. dmethod (объект C)

Как написать код для этого сценария?

+1

* Почему вы хотите это сделать? Это почти всегда плохая практика, которая указывает, что код должен быть переработан. – chrylis

+0

В существующем приложении у меня есть метод фильтрации (это dmethod (String val, Object B). Он делает что-то вроде фильтрации с использованием содержимого Object B. Но теперь мне нужна фильтрация такого же типа с использованием содержимого Object C. Мне нравится делать это при минимальном изменении кода и меньшем воздействии. Есть ли лучший способ сделать это? – Rems

+0

Да, то, что вам нужно сделать, должно быть в переопределенном методе, который каждый класс реализует в соответствии с его потребностями. – chrylis

ответ

0

Для определения класса объекта, начните с:

Object.getClass() 

и идти оттуда.

Как только у вас есть реальный объект Class для вашего объекта, вы можете опрашивать the API для получения информации, например, его имени и т. Д.

В части (2) вашего вопроса, если оба B и C продлить, то вы можете определить dmethod() так:

dmethod(A a) 

Способ затем может действовать на что-либо, что является общим для обоих B и C, т.е. в их суперклассе (А). Если вам нужно что-то конкретное для B или C, вы можете отключить «a» до B или C (проверьте, используя instanceof, чтобы узнать, что такое тип «a»).

Вы можете определить две версии dmethod() в соответствии с вашим вопросом: одну, которая принимает B, и одну, которая принимает C. Перегрузка поддерживает это.

+0

Спасибо Дэйв. Не могли бы вы объяснить немного больше. Какова будет структура реализации метода? – Rems

+0

@ Что вы пытаетесь достичь точно? И что вы подразумеваете под структурой? – dave

+0

Я понял ваше решение. Это мое требование в существующее приложение, у меня есть метод фильтрации (это dmethod (String val, Object B). Он делает какую-то фильтрацию, используя Object B con палатки. Но теперь мне нужна такая же фильтрация с использованием содержимого Object C. Мне нравится делать это при минимальном изменении кода, а также при меньшем воздействии. Есть ли лучший способ сделать это? Предлагаемое решение является хорошей практикой? – Rems

2

Внутри dmethod (объект О),

Использование:

if(o instanceof B) { 
    // ... 
} 
else if(o instanceof C) { 
    // ... 
} 

, чтобы узнать, есть ли аргумент, переданный в это объект В или объект С?

Подробнее о instanceof.

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