RpcUtil
Date: 2017-07-08

com.google.protobuf

## Class RpcUtil

- java.lang.Object
- - com.google.protobuf.RpcUtil

-     public final class RpcUtil
      extends java.lang.Object

  Grab-bag of utility functions useful when dealing with RPCs.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `RpcUtil.AlreadyCalledException` Exception thrown when a one-time callback is called more than once.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static <Type extends Message> RpcCallback<Message>` | `generalizeCallback(RpcCallback<Type> originalCallback, java.lang.Class<Type> originalClass, Type defaultInstance)` Take an `RpcCallback` accepting a specific message type and convert it to an `RpcCallback<Message>`.
    `static <ParameterType> RpcCallback<ParameterType>` | `newOneTimeCallback(RpcCallback<ParameterType> originalCallback)` Creates a callback which can only be called once.
    `static <Type extends Message> RpcCallback<Type>` | `specializeCallback(RpcCallback<Message> originalCallback)` Take an `RpcCallback<Message>` and convert it to an `RpcCallback` accepting a specific message type.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### specializeCallback

          public static <Type extends Message> RpcCallback<Type> specializeCallback(RpcCallback<Message> originalCallback)

      Take an `RpcCallback<Message>` and convert it to an `RpcCallback` accepting a specific message type. This is always type-safe (parameter type contravariance).

    - #### generalizeCallback

          public static <Type extends Message> RpcCallback<Message> generalizeCallback(RpcCallback<Type> originalCallback,
                                                                       java.lang.Class<Type> originalClass,
                                                                       Type defaultInstance)

      Take an `RpcCallback` accepting a specific message type and convert it to an `RpcCallback<Message>`. The generalized callback will accept any message object which has the same descriptor, and will convert it to the correct class before calling the original callback. However, if the generalized callback is given a message with a different descriptor, an exception will be thrown.

    - #### newOneTimeCallback

          public static <ParameterType> RpcCallback<ParameterType> newOneTimeCallback(RpcCallback<ParameterType> originalCallback)

      Creates a callback which can only be called once. This may be useful for security, when passing a callback to untrusted code: most callbacks do not expect to be called more than once, so doing so may expose bugs if it is not prevented.