Spec-Zone.ru › OpenJDK 8

Класс 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.

Методы

Модификатор и тип Метод и описание
CompositeData getCompositeData()

Возвращает CompositeData, переданный в конструктор.

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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API