我有一个名为X的类,它实现了java.sql包中的Connection接口。我们正在使用java 1.6,一切正常.Oracle在java 1.7的Connection接口中引入了4个新方法。当我构建我的代码时JRE设置为1.7(在Eclipse的构建路径中)代码无法编译并具有以下错误
BrmPcmConnection类型必须实现继承的抽象方法Connection.abort(Executor)
我理解Connection.abort是Java 7中引入的新方法,我需要实现它。我有相同的代码,使用1.6编译,它在1.7 JRE上运行良好!
请帮助我理解,为什么代码会编译错误但在运行时没有异常。是不是因为在运行时没有人调用新方法?
答案 0 :(得分:2)
编译应用程序时,必须实现超类的所有抽象方法。但是,假设您有一个已经编译的程序,并且您通过添加一个方法来更改超类或接口会发生什么?
JVM将尝试运行该程序,如果您实际上没有调用该方法,这一切都很好。如果你调用这个方法,如果你在一个没有它的版本中编译就很难,那么你将得到一个运行时错误。
但是不要打电话给你没有的方法,这一切都有效。
如果您没有这些方法的实现,我建议添加
// @Override
public void setSchema(String pSchema) throws SQLException {
throw new UnsupportedOperationException();
}
在这种情况下你也可以throw new SQLException("Not implemented")
。
注意:我已注释掉@Override
,因此它仍会在旧版本中编译。