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.
Take anRpcCallbackaccepting a specific message type and convert it to anRpcCallback<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.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[],[],null,["# Class RpcUtil (3.19.4)\n\n public final class RpcUtil\n\nGrab-bag of utility functions useful when dealing with RPCs. \n\nInheritance\n-----------\n\n[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e RpcUtil \n\nInherited Members\n-----------------\n\n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nStatic Methods\n--------------\n\n### \\\u003cParameterType\\\u003enewOneTimeCallback(RpcCallback\\\u003cParameterType\\\u003e originalCallback)\n\n public static RpcCallback\u003cParameterType\u003e \u003cParameterType\u003enewOneTimeCallback(RpcCallback\u003cParameterType\u003e originalCallback)\n\nCreates a callback which can only be called once. This may be useful for security, when passing\na callback to untrusted code: most callbacks do not expect to be called more than once, so\ndoing so may expose bugs if it is not prevented.\n\n### \\\u003cType\\\u003egeneralizeCallback(RpcCallback\\\u003cType\\\u003e originalCallback, Class\\\u003cType\\\u003e originalClass, Type defaultInstance)\n\n public static RpcCallback\u003cMessage\u003e \u003cType\u003egeneralizeCallback(RpcCallback\u003cType\u003e originalCallback, Class\u003cType\u003e originalClass, Type defaultInstance)\n\nTake an `RpcCallback` accepting a specific message type and convert it to an `\nRpcCallback\u003cMessage\u003e`. The generalized callback will accept any message object which has the\nsame descriptor, and will convert it to the correct class before calling the original callback.\nHowever, if the generalized callback is given a message with a different descriptor, an\nexception will be thrown.\n\n### \\\u003cType\\\u003especializeCallback(RpcCallback\\\u003cMessage\\\u003e originalCallback)\n\n public static RpcCallback\u003cType\u003e \u003cType\u003especializeCallback(RpcCallback\u003cMessage\u003e originalCallback)\n\nTake an `RpcCallback\u003cMessage\u003e` and convert it to an `RpcCallback` accepting a\nspecific message type. This is always type-safe (parameter type contravariance)."]]