मैंने एएसएन.1 नामक फ़ाइल प्रारूप के लिए एक पार्सर लिखा है जो जेनेरिक फ़ील्ड को विशिष्ट जावा प्रकारों में परिवर्तित करने के लिए गुइस के TypeLiteral.getFieldType(Field)
का उपयोग करता है, इसलिए मैं सही प्रकार (जैक्सन या जीएसओएन डाटाबेसिंग के समान) का निर्माण कर सकता हूं। लेकिन चूंकि मैं पहले से ही अमरूद पर निर्भर हूं और ऐसा लगता है कि यह एक नया टाइप लिटरल प्रतिस्थापन है, मैं इसके बजाय TypeToken
का उपयोग करना चाहता हूं। Guave TypeToken documentation के अनुसार:क्या अमरूद के टाइप टोकन को सामान्य क्षेत्र का विशिष्ट प्रकार मिल सकता है?
TypeToken
Guice केTypeLiteral
वर्ग के समान है, लेकिन एक महत्वपूर्ण अंतर के साथ: यह गैर reified प्रकार जैसेT
,List<T>
या यहाँ तक किList<? extends Number>
समर्थन करता है; जबकिTypeLiteral
नहीं है।TypeToken
भी serializable है और कई अतिरिक्त उपयोगिता तरीकों की पेशकश करता है।
क्या आप TypeToken
का उपयोग करके एक फ़ील्ड का संशोधित प्रकार प्राप्त कर सकते हैं? दूसरे शब्दों में, मैं गुवा में निम्नलिखित कैसे कर सकता हूं?
import org.junit.Test;
import com.google.inject.TypeLiteral;
public class FieldTypeTest {
public static class A<T> {
T a;
}
public static class B {
A<String> b;
}
@Test
public void testTypeToken() throws SecurityException, NoSuchFieldException {
TypeLiteral<?> reifiedA = TypeLiteral.get(B.class).getFieldType(B.class.getDeclaredField("b"));
assertEquals(String.class, reifiedA.getFieldType(reifiedA.getRawType().getDeclaredField("a")).getRawType());
}
}
धन्यवाद, getGenericType() और संकल्प() मैं क्या जरूरत है। \t \t टाइप टोकन > reifiedA = TypeToken.of (B.class) .resolveType (B.class.getDeclaredField ("b")। GetGenericType()); \t \t assertEquals (स्ट्रिंग.क्लास, reifiedA.resolveType (reifiedA.getRawType()। GetDeclaredField ("a")। GetGenericType())। GetRawType()); – yonran
यह उत्तर +50 के लायक है! मैं इसे 3 दिनों के लिए देख रहा था और आपने मेरी जान बचाई! –
मुझे यह सुनकर खुशी हुई :) –