-5

请参考以下示例。

==== 之前 ====

---- 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 更改也可能是字节码不兼容的。就我而言,重建整个项目的想法并不好。成本太高

任何想法或解决方法?

4

1 回答 1

8

尽管 A.java 发生了变化,但 B.java 源文件没有变化。

你的意思是A.java即使改变了也没有B.java改变。

是的,如果你改变了B.java,你必须重新编译A.java,这取决于它。var在这方面没有任何改变,无论如何你都需要这样做。唯一的区别是,如果你使用,源代码A.java不会改变,如果你不使用var,源代码也会改变。无论如何都需要重新编译。

大多数程序员只会将修改后的源文件应用到真实服务器。

需要引用。

大多数非玩具项目的程序员都使用适当的构建工具。使用适当的构建工具将确保您在必要时重新编译和重新部署。如果您选择重新编译和重新部署的内容,而不是总是在依赖项发生变化时重新编译类,那么您确实会在 Java 10 中遇到问题——而在 Java 9 和更早版本中您已经遇到了问题。您将对进行不兼容的更改B.java,无法识别您需要修改和重建A.java,并遇到运行时不兼容问题。

var不是您描述的场景中的问题。项目工具是。

var完全是可选的。如果您认为它会给您的项目带来麻烦,请不要使用它。

于 2018-03-29T06:39:50.123 回答