【发布时间】:2014-11-20 19:13:29
【问题描述】:
我开始用 Java 做一些高级的事情(对我来说是高级 xD)。
我有这个:
interface ResultSet {
public void close();
}
class DbResult {
ResultSet data;
Statement statement;
public void close() {
this.data.close();
this.statement.close();
}
}
我试过这样做:
interface ResultSet { //I think that is abstract or something
public void close();
}
abstract class DbResult implements ResultSet {
Statement statement;
@Override
public void close() {
super.close();
this.statement.close();
}
}
显然它不起作用,因为 ResultSet 不是超类。我也尝试让 DbResult 成为一个接口并扩展 ResultSet 但它告诉我接口方法不能有一个主体,所以我不知道该怎么做。
我正在尝试这样做,以便我可以关闭结果语句,结果只有一个变量而不是 2 个,因此不太容易因忘记关闭语句而发生内存泄漏。
Database 类以这种方式查询数据库:
class Database {
private Connection connection;
/* Here a constructor that
inits the connection and such things */
public DbResult query(String q) {
Statement statement = this.connection.createStatement();
DbResult result = (DbResult)statement.executeQuery(q);
result.statement = statement;
return result;
}
编辑: 好的,既然我知道我不能,我想知道我是否可以以一种骇人听闻的形式做到这一点,但我:
有没有办法检查一个类中是否调用了一个不存在的方法,捕获它并在另一个变量中调用该方法名?
例如,ResultSet 有一个名为 getString() 的方法。我想知道是否可以调用DbResult.getString("blah"); 和DbResult 会将该方法重定向到this.data,但无需在DbResult 类中实现getString 方法。
我想知道是否可能,因为ResultSet 中有大量函数,并且调用DbResult.data.METHOD 不如DbResult.METHOD 优雅。
【问题讨论】:
-
解决方法很简单:不要尝试调用不存在的超级方法。话虽如此,为了获得更好更完整的答案,您可能需要提供更多上下文——您为什么要尝试调用一开始不存在的已实现接口的超级方法?
-
答案已编辑。您的修改一切都发生了巨大变化。
标签: java class inheritance interface