जावा गतिशील टाइपिंग का समर्थन नहीं करता है, लेकिन आप जावा में है कि का उपयोग कर गतिशील प्रॉक्सी की तरह कुछ अनुकरण कर सकते हैं।
MyOps p = (MyOps) Proxy.newProxyInstance(getClass().getClassLoader(), //
new Class<?>[] { MyOps.class }, //
new MyHandler(myObject));
p.foo();
p.boo();
जहां MyHandler इस तरह घोषित किया जाता है:
public interface MyOps {
void foo();
void boo();
}
फिर myObjectInstance पर गतिशील मंगलाचरण के लिए प्रॉक्सी बनाने के लिए: सबसे पहले आप आपरेशनों आप अपने वस्तुओं पर आह्वान करना चाहते हैं के साथ एक इंटरफेस घोषित करने के लिए की आवश्यकता होगी
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);
}
}
इसलिए, अगर myObject में विधियों foo() और बू() हैं, तो उन्हें बुलाया जाएगा, अन्यथा, आपको RuntimeException मिलेगा।
वहाँ भी है जिन भाषाओं में JVM में चला सकते हैं की संख्या गतिशील टाइपिंग का समर्थन करता है, उदा स्कैला, ग्रोवी, जेआरबी, बीनशेल, जावास्क्रिप्ट/राइनो और कई अन्य। देशी गतिशील प्रेषण का समर्थन करने के लिए जावा 7 में कुछ जेवीएम परिवर्तन आ रहे हैं, इसलिए ये भाषाएं बेहतर प्रदर्शन कर सकती हैं, लेकिन ऐसी सुविधा सीधे टाइप की गई जावा भाषा में प्रकट नहीं होगी।
स्रोत
2010-10-14 17:49:49
मुझे उत्सुकता है कि आप इसे सी # में कैसे उपयोग कर रहे हैं। ऐसा लगता है कि आप स्थिर प्रकार की सुरक्षा से बचने के लिए इसका उपयोग कर रहे हैं, जो सी # ** या ** जावा में एक अच्छा विचार नहीं है। –