Класс CompositeDataInvocationHandler
- java.lang.Object
-
- javax.management.openmbean.CompositeDataInvocationHandler
- Все реализуемые интерфейсы:
- InvocationHandler
public class CompositeDataInvocationHandler extends Object implements InvocationHandler
Обработчик InvocationHandler, который перенаправляет методы-геттеры на CompositeData. Если у вас есть интерфейс, содержащий только методы-геттеры (например, String getName() или boolean isActive()), то вы можете использовать этот класс в сочетании с классом Proxy, чтобы создать реализацию интерфейса, где каждый геттер возвращает значение соответствующего элемента в CompositeData.
Например, предположим, что у вас есть интерфейс такого вида:
public interface NamedNumber {
public int getNumber();
public String getName();
} и CompositeData, построенный так: CompositeData cd =
new CompositeDataSupport(
someCompositeType,
new String[] {"number", "name"},
new Object[] {5, "five"}
); тогда вы можете создать объект, реализующий NamedNumber и поддерживаемый объектом cd так: InvocationHandler handler =
new CompositeDataInvocationHandler(cd);
NamedNumber nn = (NamedNumber)
Proxy.newProxyInstance(NamedNumber.class.getClassLoader(),
new Class[] {NamedNumber.class},
handler); Вызов nn.getNumber() вернёт тогда **5**. Если первая буква свойства, определённого геттером, заглавная, то этот обработчик сначала ищет элемент в CompositeData, начинающийся с заглавной буквы, а затем, если его нет, ищет элемент, начинающийся с соответствующей строчной буквы или кода символа. Для геттера, названного getNumber(), обработчик сначала ищет элемент, названный Number, а затем number. Если геттер называется getnumber(), то элемент должен называться number.
Если метод, переданный методу invoke, является методом boolean equals(Object) унаследованным от Object, то он вернёт true тогда и только тогда, когда аргумент является Proxy, чей InvocationHandler также является CompositeDataInvocationHandler и чей базовый CompositeData равен (но не обязательно идентичен) объекту данного класса. Если метод, переданный invoke , является методом int hashCode() унаследованным от Object, то он вернёт значение, согласующееся с этим определением equals: если два объекта равны согласно equals, то у них будет одинаковое hashCode.
- С момента:
- 1.6
Конструкторы
| Конструктор и описание |
|---|
CompositeDataInvocationHandler(CompositeData compositeData) Создаёт обработчик, основанный на заданном |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
CompositeData |
getCompositeData() Возвращает |
Object |
invoke(Object proxy,
Method method,
Object[] args) Обрабатывает вызов метода на экземпляре прокси и возвращает результат. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
CompositeDataInvocationHandler
public CompositeDataInvocationHandler(CompositeData compositeData)
Создаёт обработчик, основанный на заданном CompositeData.
- Параметры:
-
compositeData-CompositeData, который будет предоставлять информацию геттерам. - Исключения:
-
IllegalArgumentException- еслиcompositeDataравно null.
Методы
getCompositeData
public CompositeData getCompositeData()
Возвращает CompositeData, переданный в конструктор.
- Возвращает:
CompositeData, на котором основан данный обработчик. Это значение никогда не равно null.
invoke
public Object invoke(Object proxy,
Method method,
Object[] args)
throws Throwable Описание скопировано из интерфейса: InvocationHandler
Обрабатывает вызов метода на экземпляре прокси и возвращает результат. Этот метод вызывается для обработчика вызовов, когда вызывается метод на экземпляре прокси, с которым он ассоциирован.
- Определено в:
-
invokeв интерфейсеInvocationHandler - Параметры:
-
proxy- экземпляр прокси, на котором был вызван метод -
method- экземплярMethod, соответствующий методу интерфейса, вызванному на экземпляре прокси. Класс объявления объектаMethodбудет интерфейсом, в котором метод был объявлен, что может быть суперинтерфейсом интерфейса прокси, который прокси-класс унаследовал метод через. -
args- массив объектов, содержащий значения аргументов, переданных в вызов метода на экземпляре прокси, илиnullесли метод интерфейса не принимает аргументы. Аргументы примитивных типов упаковываются в экземпляры соответствующего класса-обертки для примитивных типов, например,java.lang.Integerилиjava.lang.Boolean. - Возвращает:
- значение, которое должно быть возвращено из вызова метода на экземпляре прокси. Если объявленный тип возврата метода интерфейса - примитивный тип, то возвращаемое значение должно быть экземпляром соответствующего класса-обертки; в противном случае, это должно быть тип, присваиваемый объявленному типу возврата. Если возвращаемое значение этим методом равно
nullи тип возврата метода интерфейса примитивный, то при вызове метода на экземпляре прокси будет брошено исключениеNullPointerException. Если возвращаемое значение не совместимо с объявленным типом возврата метода интерфейса, как описано выше, то при вызове метода на экземпляре прокси будет брошено исключениеClassCastException. - Исключения:
-
Throwable- исключение, которое должно быть выброшено из вызова метода на экземпляре прокси. Тип исключения должен быть присваиваемым либо любому из типов исключений, объявленных вthrows-части метода интерфейса, либо к исключениямjava.lang.RuntimeExceptionилиjava.lang.Error. Если брошено checked исключение, которое не присваивается ни одному из типов исключений, объявленных вthrows-части метода интерфейса, то будет брошено исключениеUndeclaredThrowableExceptionсодержащее исключение, которое было брошено данным методом, при вызове метода на экземпляре прокси. - См. также:
UndeclaredThrowableException
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.