【发布时间】:2018-09-08 00:25:38
【问题描述】:
请参考以下示例。
==== 之前 ====
---- A.java ---
var userAccounts = userService.getUserAccounts();
--- B.java
class UserService {
public OldUserAccounts getUserAccounts();
}
==== 之后 ====
---- A.java ---
var userAccounts = userService.getUserAccounts();
--- B.java
class UserService {
public NewUserAccounts getUserAccounts();
}
虽然 A.java 发生了变化,但 B.java 源文件没有变化。 B.class 文件的信息有 'userAccounts' 变量类型是 'OldUserAccounts' 你不是吗? 如果我将修改后的源文件应用于真实服务器。 'var' 会产生错误?
注意: 我知道这是一种不好的做法,即使没有 var 更改也可能是字节码不兼容的。就我而言,重建整个项目的想法并不好。 成本太高了
任何想法或解决方法?
【问题讨论】:
-
其实变化好像在B.java中
-
大多数程序员只会将修改后的源文件应用到真实服务器:不会。没有一个理智的人会这样做。 Sane 开发人员使用他们的构建工具来编译、组装和测试他们的代码。然后上传生成的工件(一个 jar 文件或一个 war 文件,通常伴随着几个其他文件(配置等))并替换之前的安装。服务器上不需要源文件。
-
“重建整个项目的想法对我来说不是很好。成本太高了”“成本”怎么会太多?完整的构建需要多长时间?如果您的项目太大以至于构建时间超过几分钟,那么您应该在构建服务器上进行每日构建。哎呀,不管构建时间如何,您都应该这样做。一个非常大的项目应该被分成模块(不一定是Java 9模块)。您的构建是自动化的,对吗?
-
如果您在非常具体的情况下对
var有任何问题,有 一种解决方法。在这种情况下声明类型。 -
这与
var无关。如果您使用清单类型 (OldUserAccounts u = service.getUserAccounts()) 编写A,它将以完全相同的方式中断。问题是您进行了二进制不兼容的更改。