मामूली प्रदर्शन हानि की संभावना है, क्योंकि संकलक कभी-कभी सिंथेटिक ब्रिज विधियों को जोड़ता है। निम्न उदाहरण पर विचार करें:
public class GenericPerformance {
public static void main(final String[] args) {
final Stuff<Integer> stuff = new IntStuff();
final Integer data = stuff.getData();
stuff.putData(data);
}
}
interface Stuff<T> {
T getData();
void putData(T stuff);
}
class IntStuff implements Stuff<Integer> {
private Integer stuff;
public Integer getData() {
return stuff;
}
public void putData(final Integer stuff) {
this.stuff = stuff;
}
}
आप उत्पन्न बाईटकोड को देखें, तो आप देखेंगे: मुख्य विधि में, मिट इंटरफ़ेस तरीकों
java.lang.Object Stuff.getData()
void Stuff.putData(java.lang.Object)
लागू कर रहे हैं। विधियों, हस्ताक्षर
java.lang.Object getData()
void putData(java.lang.Object)
संशोधक
public bridge synthetic
साथ
दोनों के साथ IntStuff
में लागू, "असली" तरीकों
java.lang.Integer IntStuff.getData()
void putData(java.lang.Integer)
पहले कृत्रिम विधि केवल पूर्णांक परिणाम देता प्रतिनिधि यही कारण है कि, जबकि दूसरा प्रदर्शन putData(Integer)
पर कॉल करने से पहले ऑब्जेक्ट से इंटीजर तक कास्ट।
आप टाइप करने के लिए IntStuff
stuff
चर बदलते हैं, तो दोनों Integer
तरीकों के बजाय सिंथेटिक Object
तरीकों में से कहा जाता है।
स्रोत
2010-04-30 19:11:53
जहां तक मैं देख सकता हूं, वे सीधे तुलनीय नहीं हैं। दूसरे उदाहरण को 'ऑब्जेक्ट' को पैरामीटर के रूप में नहीं लेना चाहिए? –