作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有下面的类,里面封装了一些测试数据。我只需要它的一个实例,所以我创建了一个枚举。
public enum ErnstReuterPlatzBuildings {
INSTANCE; // Compiler error occurs here
private final Map<String, IBuilding> buildingsByIds;
ErnstReuterPlatzBuildings() throws ParserConfigurationException,
SAXException, XPathExpressionException, IOException {
this.buildingsByIds = composeBuildingsByIds(
getBuildings(ErnstReuterPlatzBuildings.class)
);
}
public Map<String, IBuilding> getBuildingsByIds() {
return buildingsByIds;
}
public static Document readErnstReuterPlatzData(final Class clazz)
throws ParserConfigurationException, SAXException, IOException {
final InputStream stream =
clazz.getClassLoader()
.getResourceAsStream("mc/ernstReuterPlatz/map.osm");
final DocumentBuilderFactory dbfac =
DocumentBuilderFactory.newInstance();
final DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
return docBuilder.parse(stream);
}
private Map<String, IBuilding> composeBuildingsByIds(
final Set<IBuilding> buildings) {
final Map<String,IBuilding> buildingsByIds = new HashMap<>();
for (final IBuilding building : buildings) {
buildingsByIds.put(building.getWayId(), building);
}
return buildingsByIds;
}
private Set<IBuilding> getBuildings(final Class clazz)
throws ParserConfigurationException, SAXException, IOException,
XPathExpressionException {
final Document doc = readErnstReuterPlatzData(clazz);
final PointsReader pointsReader = new PointsReader(doc);
pointsReader.init();
final BuildingExtractor testObject =
new BuildingExtractor(pointsReader);
return testObject.extractBuildings(doc);
}
}
在其唯一元素 INSTANCE;
的声明中,我在 IntelliJ Idea 中收到以下编译器错误:
Error:(22, 5) java: unreported exception javax.xml.parsers.ParserConfigurationException; must be caught or declared to be thrown
如果它发生在定义元素而不是方法的那一行,我该如何修复它?
最佳答案
How can I fix it, given that it occurs at the line, where the element is defined, not a method?
在底层,Java 通过调用构造函数创建一个实例 INSTANCE
。声明行中的代码类似于:
public static final INSTANCE = new ErnstReuterPlatzBuildings();
这就是错误来自该行的原因。
据我所知,没有办法通过允许用户捕获已检查的异常来解决此问题,因为 INSTANCE
是在任何方法调用之外的上下文中初始化的。
您可以通过自己捕获异常并将其包装在适当类型的未经检查的 RuntimeException
或什至 ExceptionInInitializerError
中来解决此问题:
ErnstReuterPlatzBuildings() {
try {
this.buildingsByIds = composeBuildingsByIds(
getBuildings(ErnstReuterPlatzBuildings.class)
);
} catch (ParserConfigurationException pce) {
throw new ExceptionInInitializerError(pce);
} catch (SAXException sxe) {
throw new ExceptionInInitializerError(sxe);
} catch (XPathExpressionException xpe) {
throw new ExceptionInInitializerError(xpe);
} catch (IOException ioe) {
throw new ExceptionInInitializerError(ioe);
}
}
关于java - 为什么我会收到此编译器错误(使用枚举作为单例)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053498/
我是一名优秀的程序员,十分优秀!