Created
February 2, 2018 15:22
-
-
Save code-twister/01b11cc4bb6dd8a2c33792488b9b9d17 to your computer and use it in GitHub Desktop.
An example showing how to create dynamic proxies for interfaces.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.lang.reflect.Proxy; | |
import java.util.Arrays; | |
public class ProxyExample { | |
public static void main(String[] args) { | |
// Setup... this is where the magic happens... | |
ApiInterface service = (ApiInterface) Proxy.newProxyInstance( | |
ApiInterface.class.getClassLoader(), | |
new Class[]{ ApiInterface.class }, | |
(proxy, method, args1) -> { | |
// we control what happens when the method is called (invoked), we get all the necessary information | |
System.out.println("invoking method "+method.getName()+" with arguments "+ Arrays.toString(args1)); | |
// this next part is just to show how you can manipulate return value | |
if (args1.length > 0 && args1[0] instanceof String) { | |
return ((String) args1[0]).toUpperCase(); | |
} | |
return null; | |
} | |
); | |
// CLIENT CODE we call both methods in the ApiInterface | |
System.out.println("returned: " + service.getSomeStringFromServer("Hello")); | |
service.doSomeOtherThing(4.5d); | |
} | |
interface ApiInterface { | |
String getSomeStringFromServer(String parameter); | |
void doSomeOtherThing(double otherParam); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment