2017-08-18 9 views
8

मैं वर्तमान में इंटरफेस उत्पन्न करने के लिए Roaster का उपयोग कर रहा हूं, लेकिन मेरे इंटरफ़ेस में सामान्य प्रकार हैं।रोस्टर का उपयोग करके, मैं एक विशिष्ट जेनेरिक प्रकार (या प्रकार) के साथ एक इंटरफ़ेस कैसे उत्पन्न कर सकता हूं?

String entityName = "SimpleEntity"; 

JavaInterfaceSource repository = Roaster.create(JavaInterfaceSource.class) 
     .setName(entityName + "Repository"); 

JavaInterfaceSource jpaInterface = repository.addInterface(JpaRepository.class); 
jpaInterface.addTypeVariable(entityName); 
jpaInterface.addTypeVariable("String"); 

लेकिन उत्पन्न कोड है कि लग रहा है (कुछ) में ऊपर दिए गए परिणामों इस तरह::

public interface SimpleEntityRepository<SimpleEntity> 
     extends 
      org.springframework.data.jpa.repository.JpaRepository { 
} 

मैं वास्तव में क्या चाहते है

यहाँ क्या मैं उन्हें उत्पन्न करने के लिए के साथ शुरू करने की कोशिश कर रहा था जेनेरिक के लिए JpaRepository तक बाध्य होना चाहिए। मैं इसे कैसे पूर्ण करूं?

उत्तर

3

JavaInterfaceSource#addInterfaceString हस्ताक्षर के साथ अधिभारित है। इसका मतलब है कि आप कुछ चालाक स्ट्रिंग concatenation करके एक सामान्य प्रकार बना सकते हैं। यह JavaInterfaceSource का एक ही उदाहरण देता है, जैसे उपर्युक्त उदाहरण में, jpaInterface == repository, ताकि ऑपरेशन अनावश्यक और भ्रामक दोनों हो।

चूंकि यह String के साथ अधिभारित है, इसलिए हम केवल जेनेरिक (पढ़ें: कोण ब्रैकेट) जोड़ते हैं जिसे हम स्वयं चाहते हैं।

repository.addInterface(JpaRepository.class.getSimpleName() + 
            "<" + entityName + ", String>"); 

यह प्रकार- सुरुचिपूर्ण एपीआई के बाकी के रूप के रूप में नहीं हो सकता है, लेकिन यह अंत में सही वस्तु उत्पन्न करता है।

public interface SimpleEntityRepository 
     extends JpaRepository<SimpleEntity, String> { 
} 
+0

मकोटो, आपके बक्षीस के लिए, कोड में देखकर यह सबसे आसान आसानी से उपलब्ध समाधान की तरह दिखता है। एकमात्र अन्य मार्ग 'एडइंटरफेस (जावाइंटरफेस प्रकार)' विधि का उपयोग करना है, लेकिन ['जावाइंटरफेस'] (http://javadox.com/org.jboss.forge.roaster/roaster-api/2.18.1.Final/org /jboss/forge/roaster/model/JavaInterface.html) जेनेरिक पैरामीटर के लिए प्रतिस्थापन निर्दिष्ट करने का समर्थन नहीं करता है: यह ['TypeVariableSource'] (http://javadox.com/org.jboss.forge.roaster द्वारा समर्थित नहीं है) /roaster-api/2.18.1.Final/org/jboss/forge/roaster/model/source/TypeVariableSource.html)। – SergGr

संबंधित मुद्दे

 संबंधित मुद्दे