草庐IT

backwards-compatibility

全部标签

java - 使具有相同删除二进制文件的通用返回类型兼容吗?

我有以下类(class):publicabstractFoo{Foo(){}publicabstractFoodoSomething();publicstaticFoocreate(){returnnewSomePrivateSubclassOfFoo();}}我想把它改成下面的定义:publicabstractFoo>{Foo(){}publicabstractTdoSomething();publicstaticFoocreate(){returnnewSomePrivateSubclassOfFoo();}}此更改二进制兼容吗?即,针对类的旧版本编译的代码是否可以在不重新编译的情

java - 一般的 Java API 兼容性规则是什么

详细说明:如果我们使用公共(public)API,例如编写java程序,在JDK1.4中,如果应该在它上面的所有版本中都能正常运行。在1.4、1.5、1.6和1.7中的所有更新版本中?另外,不同更新版本之间的可组合性规则是什么,例如1.6.22和1.6.23什么不能改变,什么可以改变?当然,publicAPI的定义是不能改的,那其他的呢?javadoc?内部API定义、实现?如果有人能指出关于这个主题的具体官方文档,那就太好了。谢谢,在java文档错误中有一个例子,他们不打算在更新程序版本之间进行更改。见http://bugs.sun.com/bugdatabase/view_bug.

java - 编译为 1.5 编写的 Java 代码以使用 1.4 JRE?

我有一个项目使用泛型和一些Java1.5/6零碎的东西。是否可以编译此代码以在运行1.4JRE的系统上运行?我使用ANT构建脚本和javac任务来编译库。这在目标属性为1.5时构建良好。如果我将目标更改为1.4,我会收到以下错误:genericsarenotsupportedin-source1.4(use-source5orhighertoenablegenerics)所以我添加了一个源属性并尝试了5和1.5的值。新错误:javac:sourcerelease5requirestargetrelease1.5我是否必须检查我的所有代码并更改1.5的内容才能使其正常工作?

java - Java 语言在其整个历史中是否保持了源代码的向后兼容性?

Java在其开发过程中是否始终保持源代码向后兼容性?更准确地说:给定两个Java版本X和Y,且X或者只有JVM级别的兼容性:例如为JVM1.2编译的类可以由JVM5运行吗?如果可以在Java5(或6或7)上运行Java2代码,我必须遵循的确切步骤是什么?直接用Java5编译器编译?使用Java2编译器编译并在JVM5上运行? 最佳答案 Sun,现在是Oracle,一直非常小心地处理与Java的向后兼容性。二进制兼容性:您应该能够在不修改的情况下在新版本上运行使用旧版本编译的Java代码。但是,可能存在一些小的不兼容性。源代码兼容性:

java - 对象到 XML,向后和向前兼容

我在一个应用程序中工作,我们需要以XML格式保存对象,并在需要时加载它们。为此,我使用JAXB将XML编码和解码回Java类。我的问题是有时我必须更改Java模型(通过添加、重命名或删除属性),结果,我将拥有不兼容的已保存XML,这些XML无法绑定(bind)回新的类形式。为了解决这个问题,每次我必须进行更改时,我都会复制一个新包(以其版本命名)下的所有类并应用请求的更改。在保存XML时,我会保存它的版本,以便我可以决定JAXB应该扫描哪个包来解码此XML。我的问题是,有没有其他方法可以使用JAXB实现向后和向前兼容性?如果没有,是否有任何其他技术可以支持这一点?

java - 增强 Java 8 的库,同时保持向后兼容性

我正在用Java开发一个开源库,希望确保它方便Java8用户,并尽可能利用Java8中的新概念(lambda等)与此同时,我绝对需要保持向后兼容性(该库必须仍然可供使用Java6或7的用户使用)。我可以采用Java8的哪些有用功能,这些功能对库用户有益,同时又不会破坏旧Java版本用户的库兼容性? 最佳答案 我不知道你的图书馆,这个建议可能有点不对。Lambdas:别担心。任何功能接口(interface)都可以使用Lambda表达式实现。方法引用:与lambda一样,它们应该只是可用的。Streams:如果这适合您的库,您应该使用

java - 为什么 Sun 指定 String.hashCode() 实现?

关于依赖String.hashCode()的当前实现是否安全似乎一直存在争论,因为从技术上讲,它由规范(Javadoc)保证。为什么Sun在规范中指定String.hashCode()的实现?为什么开发人员需要依赖hashCode()的特定实现?Sun为何如此害怕如果将来更改String.hashCode()天会塌下来?(这可能是由#2解释的) 最佳答案 依赖hashCode()的特定实现的一个原因是它是否曾经持久化到数据库、文件或任何其他存储介质中。BadThings(tm)如果在散列算法发生变化时读回数据,就会发生这种情况。您可

Java 7 语言向后兼容性

简短的问题:如果我使用以前在Java6中不可用的相对“次要”的Java7语言功能,例如try-muticatchblock...这是否意味着我的程序将无法在具有JRE6或JRE的机器上运行5安装后是按原样编译的吗?如果那是正确的,是否有一种快速生成JRE6.jar可执行文件而不更改Java7源代码的方法(顺便说一句,它使用的唯一Java7功能是try-multicatchblock)? 最佳答案 你是对的。Multi-catch是Java7的语言特性,无法将其编译为Java6(或更早版本)的JVM兼容字节码。使用Java7编译器,以

java - 避免 Eclipse 中多个 Java 版本的 "no JREs installed in the workspace that are strictly compatible"警告

我知道已经有很多关于此警告的问题,但我的问题有点不同。我知道我可以在我的pom.xml中使用此配置修复它org.apache.maven.pluginsmaven-compiler-plugin1.71.7这消除了警告,但前提是我在Eclipse中安装并配置了Java7。例如,如果我只有Java8,我仍然会看到警告,除非我将上面配置中的版本更改为1.8:BuildpathspecifiesexecutionenvironmentJavaSE-1.7.TherearenoJREsinstalledintheworkspacethatarestrictlycompatiblewiththi

java - 为什么 java.time.ZoneOffset 实例排序为 'backwards' ?

来自documentation:Theoffsetsarecomparedintheorderthattheyoccurforthesametimeofdayaroundtheworld.Thus,anoffsetof+10:00comesbeforeanoffsetof+09:00andsoondownto-18:00.有谁知道他们被这样排序的原因吗?这似乎违反直觉,因为它与偏移量的数值顺序相反。这也与它们在以GMT/UTC+0为中心的map上从左到右阅读的顺序相反。(旁白:我不明白为什么引用的文档提到“低至-18:00”。-12:00或-24:00我会理解。为什么-18:00?如果