पर कनवर्ट करें मैं org.eclipse.jdt.core.dom.ITypeBinding
इंस्टेंस को org.eclipse.jdt.core.dom.Type
इंस्टेंस में कनवर्ट करने का एक सामान्य तरीका ढूंढ रहा हूं। हालांकि मुझे लगता है कि ऐसा करने के लिए कुछ एपीआई कॉल होना चाहिए, मैं एक का पता नहीं लगा सकता।ग्रहण जेडीटी आईटी टाइप बाइंडिंग को
विशिष्ट प्रकार के आधार पर इसे मैन्युअल रूप से करने के कई तरीके दिखाई देते हैं।
क्या ITypeBinding
लेने का कोई सामान्य तरीका है और इन सभी विशेष मामलों के बिना Type
प्राप्त करें? String
लेना और Type
लौटना भी स्वीकार्य होगा।
अद्यतन
प्रतिक्रिया सेअब तक, ऐसा लगता है मैं इन सब विशेष मामलों को संभालने के लिए नहीं है। ऐसा करने का पहला प्रयास यहां दिया गया है। मुझे यकीन है कि यह पूरी तरह से सही तो जांच की सराहना की नहीं है कर रहा हूँ:
public static Type typeFromBinding(AST ast, ITypeBinding typeBinding) {
if(ast == null)
throw new NullPointerException("ast is null");
if(typeBinding == null)
throw new NullPointerException("typeBinding is null");
if(typeBinding.isPrimitive()) {
return ast.newPrimitiveType(
PrimitiveType.toCode(typeBinding.getName()));
}
if(typeBinding.isCapture()) {
ITypeBinding wildCard = typeBinding.getWildcard();
WildcardType capType = ast.newWildcardType();
ITypeBinding bound = wildCard.getBound();
if(bound != null) {
capType.setBound(typeFromBinding(ast, bound)),
wildCard.isUpperbound());
}
return capType;
}
if(typeBinding.isArray()) {
Type elType = typeFromBinding(ast, typeBinding.getElementType());
return ast.newArrayType(elType, typeBinding.getDimensions());
}
if(typeBinding.isParameterizedType()) {
ParameterizedType type = ast.newParameterizedType(
typeFromBinding(ast, typeBinding.getErasure()));
@SuppressWarnings("unchecked")
List<Type> newTypeArgs = type.typeArguments();
for(ITypeBinding typeArg : typeBinding.getTypeArguments()) {
newTypeArgs.add(typeFromBinding(ast, typeArg));
}
return type;
}
// simple or raw type
String qualName = typeBinding.getQualifiedName();
if("".equals(qualName)) {
throw new IllegalArgumentException("No name for type binding.");
}
return ast.newSimpleType(ast.newName(qualName));
}
एक छोटे से बग नहीं है: _capType.setBound (typeFromBinding (ast, ** wildCard.getBound() **), wildCard.isUpperbound()); _ typeBinding एक कच्चे संग्रह, wildCard.getBound है() शून्य वापस आ जाएगा और विधि एक वैध स्थिति के लिए एक प्रकार का उत्पादन करने में विफल हो जाएगा। आपको बस बाध्य जांचने और कोड को ठीक करने के लिए सेट करने की आवश्यकता नहीं है। – taksan