मैं की शैली में कोड का एक टुकड़ा बारे में एक टिप्पणी की थी:बार-बार एक अज्ञात वर्ग को बर्बाद कर रहा है?
Iterable<String> upperCaseNames = Iterables.transform(
lowerCaseNames, new Function<String, String>() {
public String apply(String input) {
return input.toUpperCase();
}
});
व्यक्ति ने कहा कि हर बार जब मैं इस कोड के माध्यम से जाना है, मैं इस अनाम समारोह वर्ग का दृष्टांत, और मैं इसके बजाए एक ही होना चाहिए कि उदाहरण में, एक स्थैतिक चर:
static Function<String, String> toUpperCaseFn =
new Function<String, String>() {
public String apply(String input) {
return input.toUpperCase();
}
};
...
Iterable<String> upperCaseNames =
Iterables.transform(lowerCaseNames, toUpperCaseFn);
एक बहुत ही सतही स्तर पर, यह किसी भी तरह से समझ में आता है; एक वर्ग को कई बार तुरंत चालू करना स्मृति या कुछ बर्बाद करना है, है ना?
दूसरी तरफ, लोग कोड के मध्य में गुमनाम कक्षाओं को तत्काल नहीं करते हैं जैसे कल नहीं है, और संकलक के लिए इसे अनुकूलित करने के लिए यह छोटा होगा।
क्या यह एक वैध चिंता है?
जावा में ऑब्जेक्ट आवंटन बेहद तेज़ है। और एक अज्ञात वर्ग को तुरंत चालू करना "नियमित" वर्ग से अलग नहीं है। चूंकि अज्ञात वर्ग में कोई आवृत्ति चर नहीं है, शायद ही कोई स्मृति उपयोग की जाती है (और ऑब्जेक्ट को स्टैक पर आवंटित किया जा सकता है - लेकिन मुझे इसके बारे में निश्चित नहीं है)। लेकिन वह व्यक्ति मूल रूप से सही है: एक लूप में वस्तुओं को तत्काल * * महंगा हो सकता है। लेकिन इसका गुमनाम वर्गों से कोई लेना देना नहीं है, यह किसी भी वर्ग को तत्काल करने के लिए सच है। –
मैं "कई डिस्पोजेबल कक्षाएं बनाने" द्वारा "सीपीयू चक्र" बर्बाद कर देता हूं। फिर फिर, मैं डेस्कटॉप/सर्वर के लिए लिखता हूं और * मुझे कोई परवाह नहीं है कि मैं मिलीसेकंड या दो [समग्र] * बचा सकता हूं। इसके बजाए, कोड लिखें ताकि यह कारण हो सके कि कौन सा * हो सकता है (या हो सकता है) का अर्थ "पुन: उपयोग करना" और/या इसे एक मोनिकर देना है - और उसके बाद इसे प्रोफ़ाइल दें। कोई प्रोफाइल मुद्दा नहीं है? कोई बात नहीं! – user2864740
यह अपमानजनक है अगर यह अपमानजनक है। तथ्य यह है कि यह एक अज्ञात वर्ग है इसके साथ कुछ लेना देना नहीं है। – EJP