Java InvocationHandler и синглтон - PullRequest
0 голосов
/ 22 января 2011

У меня есть одноэлементный объект "MySingle", который на всех уроках я называю MySingle.createOrGetInstance();

Теперь проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы сделать некоторые журналы методов и другие вещи до вызова метода в MySingle, поэтому я посмотрел в класс Java InvocationHandler Ссылка на источник

Однако теперь проблема заключается в том, как бы я вызвал метод singleton, потому что, когда я использую тот же код и вместо того, чтобы делать

DebugProxy.newInstance(new FooImpl());

Я делаю это

DebugProxy.newInstance(MySingle.createOrGetInstance()); Но когда я это делаю, я получаю выражение класса Cast, когда заканчиваю тем, что присваиваю результат переменной `(MySingle sing).

Я работаю на Android, но я сомневаюсь, что это что-то меняет:).

Спасибо, Фейсал Абид

Ответы [ 2 ]

2 голосов
/ 22 января 2011

Для обычного java-приложения (я не знаю android) это не удастся, потому что java.lang.reflect.Proxy будет работать только для интерфейсов!

Динамический прокси-класс (просто называемый прокси-классом ниже) - это класс, который реализует список интерфейсов, указанных во время выполнения при создании класса, с поведением, описанным ниже.

@ см .: Proxy Java Doc

В вашем случае DebugProxy из guid отражения java (http://download.oracle.com/javase/1.3/docs/guide/reflection/proxy.html), использует java.lang.reflect.Proxy!

В вашем коде MySingle - это класс, но java.lang.reflect.Proxy реализует только интерфейсы этого класса. Поэтому приведение java.lang.reflect.Proxy, созданного для класса MySingle, к классу должно MySingle завершиться неудачей с исключением класса, поскольку Прокси не является подклассом MySingle.

Один обходной путь, который будет работать: будет вызывать интерфейс MySingle и реализовывать класс MySingleImpl (с методом getInstance), а затем использовать везде (кроме создания) интерфейс.

0 голосов
/ 22 января 2011

Для приложений Android отладка является diff. Calss, который реализован специально для Android


см. ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...