【问题标题】:Is there really `ResultSet.getObject(String, Class<T>) in JDK7?JDK7 中真的有 `ResultSet.getObject(String, Class<T>) 吗?
【发布时间】:2011-12-03 06:54:00
【问题描述】:

我在 JDK7 中看到了很多更改的接口,例如,添加了ResultSet.getObject(String, Class&lt;T&gt;)。我对这种不兼容的变化感到非常惊讶,尤其是因为我从未见过它被讨论过。

我想当我使用 JAR 文件而不是尝试自己编译项目时,不兼容并不重要,对吧?

同时支持 JDK6 和 JDK7 的正确方法是什么?仅仅实现新方法而不使用它们就足够了吗?

【问题讨论】:

    标签: java compatibility java-7


    【解决方案1】:

    好像

    <T> T getObject(int columnIndex, Class<T> type) throws SQLException
    

    <T> T getObject(String columnLabel,  Class<T> type) throws SQLException
    

    在 1.7 中引入。 (至少它在the documentation 中显示“自 1.7 以来”)。我同意,这是一个令人讨厌的变化。

    java.sql 接口有更多变化。例如Connection,在 1.7 中获得了 5 个新方法。希望突破性的改变是值得的。

    仅仅实现新方法而不使用它们就足够了吗?

    可以,但要避免在早期版本的接口中不存在的方法上使用@Overrides 注解。

    【讨论】:

    • 我可以忍受,但新 Java 版本中引入这种不兼容的更改不是第一次吗?
    • 呵呵,是的,除了一些小事...例如,在 Java 1.5 之前,名为 enum 的变量是允许的 :-) 但是无法想到 API 中的任何重大更改。
    • @maaartinus 不,java.sql 接口之前已从 1.1 扩展至 1.2。 (这是我在内存中实现 JDBC 引擎的有趣项目的致命一击,然后:突然我不得不实现更多方法。)
    【解决方案2】:

    我会阅读 ResultSet javadoc,而不是 Eclipse。

    【讨论】:

    • 我在此期间找到了它,真的有since 1.7
    • “旧”方法仍然存在
    • @michael667,是的,但是在接口中引入新方法仍然是一个突破性的变化。 (我同意从接口中实际删除方法会更糟糕!)
    • 添加方法会破坏旧的实现者,而删除方法会破坏接口的旧用户。 (也许这里的引擎使用了一些代理魔法来为老司机实现它。)
    【解决方案3】:

    您可以预先实现这些方法,但您将无法使用@Override 注释。看起来 Java 7 没有定义任何会阻止您在 Java 6 中实现新方法的新类型,但情况并非总是如此(例如,Java 1.4 中 SavePoint 的用法,但还有很多其他的)。

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 2013-08-28
      • 2020-12-05
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2019-07-30
      相关资源
      最近更新 更多