gpt4 book ai didi

java - 如何解决 "java.lang.InstantiationException"?

转载 作者:数据小太阳 更新时间:2023-10-29 01:55:19 26 4
gpt4 key购买 nike

我正在使用 SAX 解析 XML 文件,但是当我调用类的类加载器时,抛出了 java.lang.InstantiationException

我根据异常的原因调试了这个,'当应用程序试图使用类Class中的newInstance方法创建类的实例时抛出,但是指定的类对象无法实例化,因为它是一个接口(interface)或者是一个抽象类。”

但是 location 类不是接口(interface)或抽象类。我还检查了该类是否位于正确的包中,确实如此。

有人知道为什么在这种情况下抛出异常吗?

在 Parser 类的 startElement 中的第一个 println 之后抛出异常:

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (qName.equals("location")){
location = true;

System.out.println("Found a location...");
//exception thrown after this statement as shown
//in the error output below
try {
//Read in the values for the attributes of the element <location>
int locationID = Integer.parseInt(atts.getValue("id"));
String locationName = atts.getValue("name");

//Generate a new instance of Location on-the-fly using reflection. The statement Class.forName("gmit.Location").newInstance(); invokes the
//Java Class Loader and the calls the null (default) constructor of Location.
Location loc = (Location) Class.forName("gmit.Location").newInstance();
loc.setId(locationID); //Now configure the Location object with an ID, Name, Description etc...
loc.setName(locationName);
} catch (Exception e) {
e.printStackTrace();
}

}else if (qName.equals("description")){
description = true;
System.out.println("Found a description. You should tie this to the last location you encountered...");
}else if (qName.equals("exits")){
exits = true;
System.out.println("Found an exit. You should tie this to the last location you encountered...");
}else if (qName.equals("item")){
item = true;
System.out.println("Found an item. You should tie this to the last game-character you encountered if the boolean gameCharacter flag is true...");
}else if (qName.equals("game-character")){
gameCharacter = true;
System.out.println("Found a game character...");
}else if (qName.equals("search-algorithm")){
searchAlgorithm = true;
System.out.println("Found a search algo. You should tie this to the last game-character you encountered if the boolean gameCharacter flag is true...");
}
}

我的完整位置类:

http://hastebin.com/yofuyafipe.java

运行时抛出的错误:

http://hastebin.com/jonozeyefe.avrasm

最佳答案

您的 Location 类没有无参数构造函数。 (它有两个带有声明参数的构造函数……所以没有默认的无参数构造函数。)

解决方案:

  • 添加一个无参数构造函数。
  • 反射性地查找 Location Class 对象上的 Constructor 对象之一,并使用带参数的 Constructor.newInstance(...) 调用它给出实际的构造函数参数值。

看起来第一个选项在这种情况下更好......因为看起来你在代码中的那个点没有所需的参数值。

关于java - 如何解决 "java.lang.InstantiationException"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com