2010-11-09 3 views
0

Я только недавно вернулся в Java-программирование и в настоящее время я придерживаюсь определенной проблемы.Java «расширяющий» объект

У меня есть объект определенного типа:

StandardClass stdClass = (StandardClass)request.getAttribute(ATTR); 

Но теперь мне нужно, чтобы сделать объект StdClass наблюдателя некоторых Observable.
Поскольку StandardClass не реализует интерфейс Observer, я не могу добавить его в качестве наблюдателя напрямую. Так что я пробовал:

ExtendedClass extends StandardClass implements Observer { ... } 

Но я не смог найти способ бросить исходный объект в новый класс.

Возможно, весь этот подход является абсолютно неправильным, и в настоящее время я не вижу леса для деревьев, поэтому я был бы признателен за любой вклад в решение этой проблемы.

Большое спасибо за ваше время и помощь, я действительно ценю это!

Приветствия,
Томас

+0

не Может у ou make 'StandardClass' реализовать' Observer'? –

ответ

3

Вы не сможете бросить исходный объект в ExtendedClass, потому что это не экземпляр этого класса. Существование подкласса не означает, что экземпляры суперкласса могут каким-то образом принуждаться к этим подклассам. В этом случае ваш объект stdClass является экземпляром только StandardClass, поэтому он не может быть успешно опущен.

EDIT уточнить: Конечно, некоторые объекты, хранящиеся в переменных StandardClass, могут быть фактически объектами ExtendedClass. Я понял, что вы не изменили фактический объект, хранящийся в запросе, просто создали подкласс. Когда вы сказали, что не можете выполнить актерский состав, я предположил, что вы имеете в виду, что при неудачном выполнении показывается ClassCastException (некоторые роли будут отклонены компилятором, потому что они не могут быть успешными, например, Integer никогда не может быть перенесен на String, но это не должно быть одним из таких случаев). Если вы создали подкласс и, ваше приложение изменило ваше приложение таким образом, чтобы объект, хранящийся в запросе, был создан как объект ExtendedClass, тогда литье должно быть успешным.

Чтобы добиться того, что вы хотите сделать, уборщик подход был бы какой-то wrapper class, который содержит в StandardClass экземпляр и сама реализует Observer методы. Затем он может вызвать соответствующие методы на стандартном кластере в ответ на наблюдаемые события.

+0

Большое спасибо за ваш ввод! Раньше я использовал подход класса-оболочки, но проблема в том, что у StandardClass есть функция тайм-аута, и в этом случае он должен был бы уведомить класс-оболочку об отмене регистрации из наблюдаемого. –

1

Если объект в request.getAttribute(ATTR) поистине Observable, то вы можете просто бросить его, как так:

Observable obs = (Observable) request.getAttribute(ATTR); 

компилятор не позволит отлит из одного типа в несовместимый тип, если он знает, что StandardClass не является Observable. Или вы можете просто объявить ссылку как ExtendedClass.

0

С вашим подходом:

request.getAttribute(ATTR); 

Должен быть возвращающей тип объекта из ExtendedClass для того, чтобы привести его к наблюдателю, например:

Observer observer = (Observer) request.getAttribute(ATTR); 
Смежные вопросы