Класс 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 |
getCompositeData() |
Возвращает CompositeData, переданный в конструктор. |
Object |
invoke |
Обрабатывает вызов метода на экземпляре прокси и возвращает результат. |
Подробное описание конструкторов
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. Если исключение, которое бросается этим методом, не присваивается ни одному из типов исключений, объявленных в разделеthrowsинтерфейсного метода, тоUndeclaredThrowableException, содержащий исключение, брошенное этим методом, будет брошено при вызове метода на прокси-экземпляре. - См. также:
© 1993, 2023, 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.
https://docs.oracle.com/en/java/javase/21/docs/api/java.management/javax/management/openmbean/CompositeDataInvocationHandler.html