Wit*_*eso 12 java properties dynamic
我来自c#的世界.
在C#我能够使用类动态http://msdn.microsoft.com/en-us/library/dd264741.aspx
这使我不必使用模板化/泛型类,而是为certian情境实现类似的感觉.
我在互联网搜索方面一直没有成功,因为不幸的是"动态"和"java"关键词在动态架构上出现了很多不相关的信息.
我在javaFX中涉足了一点,并且有一个类型var似乎与c#的动态具有相同的用法.但它似乎不适用于Java.
谢谢,斯蒂芬妮
Eug*_*hov 14
Java不支持动态类型,但您可以使用Java中的动态代理模拟类似的东西.首先,您需要声明一个接口,其中包含您要在对象上调用的操作:
public interface MyOps {
void foo();
void boo();
}
Run Code Online (Sandbox Code Playgroud)
然后在myObjectInstance上创建用于动态调用的代理:
MyOps p = (MyOps) Proxy.newProxyInstance(getClass().getClassLoader(), //
new Class<?>[] { MyOps.class }, //
new MyHandler(myObject));
p.foo();
p.boo();
Run Code Online (Sandbox Code Playgroud)
其中MyHandler声明如下:
public class MyHandler implements InvocationHandler {
private final Object o;
public MyHandler(Object o) {
this.o = o;
}
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
Method method = o.getClass().getMethod(m.getName(), m.getParameterTypes());
return method.invoke(o, args);
}
}
Run Code Online (Sandbox Code Playgroud)
所以,如果myObject有方法foo()和boo(),它们将被调用,否则,你将得到一个RuntimeException.
还有许多可以在JVM中运行的语言支持动态类型,例如Scala,Groovy,JRuby,BeanShell,JavaScript/Rhino等等.Java 7中存在一些JVM更改以支持本机动态分派,因此这些语言可以执行得更好,但这种功能不会直接暴露在静态类型的Java语言中.