代码之家  ›  专栏  ›  技术社区  ›  Bozho

在什么情况下,遗留Java代码不能在新版本上编译

  •  14
  • Bozho  · 技术社区  · 6 年前

    Java正在努力实现向后兼容(正是在这种程度上,它削弱了它的泛型)。

    7 回复  |  直到 15 年前
        1
  •  9
  •   Ryan Fernandes    15 年前

    实际上,似乎有相当多的错误——不是所有的错误都会导致编译错误,但这是sun的官方说法: http://java.sun.com/j2se/JM_White_Paper_R6A.pdf

    我通常使用这些支票:

    1. 在1.4之前的版本中,如果文件类型已知且响应代码大于或等于400,则URLConnection.getInputStream引发FileNotFoundException。否则不会引发异常

    2. DOM接口中添加了新方法,因此一些现有应用程序将无法使用新接口进行编译。

    3. ErrorHandler、EntityResolver、ContentHandler和DTDHandler现在可以由应用程序设置为null。在这种情况下,SAX2.0要求XML处理器抛出java.lang.NullPointerException(与大多数实现一样,5.0中实现的JAXP解析器通过使用默认设置对null作出反应。)

    4. DefaultHandler中的resolveEntity方法和EntityResolver子类引发IOException和SAXException。以前它只抛出SAXException。

    5. 在SAX2.0.1中,应用程序可以将ErrorHandler、EntityResolver、ContentHandler或DTDHandler设置为null。这是对sax2.0中以前的限制的放松,在这种情况下,它生成了NullPointerException(NPE)。

    6. 在5.0中,org.apache类已经在5.0中迁移到com.sun.org.apache.package.internal,这样它们就不会与开发人员下载的最新版本的类发生冲突。

    7. 从5.0开始,通过调用时间戳上的compareTo将java.sql.Timestamp与java.util.Date进行比较会导致ClassCastException。

    8. java.net.Proxy类是在5.0中添加的,这使得两个类名为Proxy: (java.lang.reflect.Proxy、java.net.Proxy)

    9. 以下单词已添加到1.3和5.0之间的Java语言中,因此它们不再可用作字段或方法标识符:[assert(在1.4中添加),enum]

        2
  •  7
  •   Omry Yadan    15 年前

    Enumeration enum = ...
    

    将使用1.5之前的JDK编译。

        3
  •  3
  •   abyx    15 年前

    例如,在JDK5中,方法 Timer.getId() 已添加,返回 long .
    实际上我们有一个类 Thread 有自己的 getId 返回字符串的方法。这当然会导致编译问题,因为我们突然试图重写一个方法并更改其返回值的类型。

        4
  •  0
  •   Jay    15 年前

    我曾经遇到一个问题,新库类名与我们创建的类名冲突。我们使用了“import java.whateveritwas.*”,所以我们在不知道的情况下拖入了这个新类。我忘了类名是什么,但是任何新类都可能发生这种情况,特别是具有“List”或“Map”这样相当通用的名称的类。

        5
  •  0
  •   Andreas Dolk    15 年前

    我曾经遇到过一个与类#getRessource()相关的问题—一些代码在1.4.2和1.5+下编译得很好,但在JVM上不起作用>1.4.2.

    我还记得第三方库的一些问题(如果我没记错的话,bea weblogic 8.1.4的一些版本)拒绝在Java 1.5环境中合作,因为一些接口被移到了不同的包中(很久以前,如果细节不准确,请纠正我)

        6
  •  0
  •   TheLQ    15 年前

    方法和类可以标记为deprecated,这将引发编译时错误。但是你可以告诉编译器忽略它。除了枚举,您还可以编译

        7
  •  0
  •   Donal Fellows    15 年前

    1


    1 公平地说,这是很久以前的事了,Eclipse的较新版本附带了内置的必需的解决方法。