Строка java.lang.ClassCastException в JavaPoet.FieldSpec
Я использую JavaPoet API для создания исходного кода. Тем не менее, в какой-то момент я извлекаю требуемые данные из xml, который представляет собой готовую строку для создания полей, затем я сохраняю строку в Object, а затем приводю объект в FieldSpec, но это дает мне исключение. Это то, что я использую это неправильно?
public List<FieldSpec> getFieldSpec() throws JDOMException{
try {
fieldSpec = new ArrayList<FieldSpec>();//com.squareup.javapoet.FieldSpec
SAXBuilder builder = new SAXBuilder();
xmlFile = new File("CodeGenerationXML\\SourceCodeFieldsXML\\Fields.xml");
doc = builder.build(xmlFile);
RootXMLFields = doc.getRootElement();
for(Element field:RootXMLFields.getChild("Fields").getChildren()){
Object ElementField = field.getText();// returns FieldSpec.builder(String.class,"str").initializer("$S","Hello").addModifiers(Modifier.PRIVATE, Modifier.FINAL).build()
fieldSpec.add((FieldSpec) ElementField);
}
} catch (Exception e) {
e.printStackTrace();
}
return fieldSpec;
}
public static void main(String arg[]) throws JDOMException{
new AddUpdateFieldsXML().getFieldSpec();
}
Исключение:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.squareup.javapoet.FieldSpec
at RandD.AddUpdateFieldsXML.getFieldSpec(AddUpdateFieldsXML.java:94)
at RandD.AddUpdateFieldsXML.main(AddUpdateFieldsXML.java:103)
3 ответа
Использовать builder
метод, как в примере в комментарии, чтобы создать FieldSpec
Объект из текста в элементе XML перед добавлением его в список.
Вы не можете просто бросить какой-то объект FieldSpec
объект. Когда вы используете JavaPoet
API, вы должны использовать FieldSpec.builder
для каждого поля, которое вы хотите создать. Вот как работает API. Смотрите этот API.
Согласно вашему Exception
журнал
Exception in thread "main" java.lang.ClassCastException: java.lang.String
cannot be cast to com.squareup.javapoet.FieldSpec
это значит нет IS-A
отношения класса com.squareup.javapoet.FieldSpec
к классу java.lang.String
, Так, String
значение не будет присвоено или приведено к какому-либо не переменному типу.
Здесь этот код генерируют Exception
Object ElementField = field.getText();// return String Values and Store it into the Object.
FieldSpec.builder(String.class,"str").initializer("$S","Hello").addModifiers(Modifier.PRIVATE, Modifier.FINAL).build()
fieldSpec.add((FieldSpec) ElementField); // ElementField contains String Object.
Вот, field.getText();
Метод getText() вернется String
Оцените и сохраните его в объекте, который в порядке, потому что Object
Класс является родителем всех других классов, существующих в Java.
Сейчас, (FieldSpec) ElementField
Вы пытаетесь разыграть String в классе FieldSpec
который не имеет отношения к Java. Потому что нет никакой связи между FieldSpec
а также String
Учебный класс.
Так, (FieldSpec) ElementField
этот кусок кода вызовет исключение.