की संलग्न कक्षा प्राप्त करें मेरे पास एक विधि है जो कार्यात्मक पैरामीटर लेती है, उदा। एक Runnable
। चूंकि यह एक लाइब्रेरी विधि है, मैं इसे कार्यात्मक पैरामीटर से व्युत्पन्न लॉगर का उपयोग करना चाहता हूं। कार्यात्मक पैरामीटर पर getClass
कॉलिंग सामान्य कक्षाओं के लिए ठीक काम करता है, और मैं नेस्टेड या अज्ञात कक्षाओं के लिए getEnclosingClass
कर सकता हूं;जावा लैम्ब्डा अभिव्यक्ति
Class<?> type = runnable.getClass();
String canonical = type.getCanonicalName();
int lambdaOffset = canonical.indexOf("$$Lambda$");
if (lambdaOffset > 0) {
try {
type = Class.forName(canonical.substring(0, lambdaOffset));
} catch (ClassNotFoundException e) {
// strange, but we can stick to the type we already have
}
}
आप देख सकते हैं, कि बहुत ही सुंदर और शायद पोर्टेबल नहीं नहीं है: लेकिन अगर यह एक लैम्ब्डा अभिव्यक्ति है, यह कुछ अस्पष्ट नाम $$Lambda$
है, जो मैं इस तरह मैन्युअल रूप से बंद पट्टी सकता युक्त देता है। मैंने getEnclosingClass
, getEnclosingMethod
, और getEnclosingConstructor
की कोशिश की है, लेकिन वे सभी null
लौटते हैं।
कोई विचार?
मेरा मानना है कि इस डिजाइन कर रहा है। –