快捷搜索:

您的位置:澳门新葡4473网站 > 项目 > VSCode 6 月 Java 更新,编辑器就该有编辑器的样子

VSCode 6 月 Java 更新,编辑器就该有编辑器的样子

发布时间:2020-05-06 02:11编辑:项目浏览(162)

    VSCode 不断在改进对 Java 语言的支持,前阵子微软为 Java 开发者推出了一个 VSCode 安装程序 Visual Studio Code Java Pack Installer,让开发者可以快速配置好 Java 开发环境,更轻松地开始上手编码。最近微软高级项目经理 Xiaokai He 发布了一篇文章,介绍了 VSCode 6 月更新中针对 Java 的更新内容。

    在上一节创建了一个scala类,如果没有更多的方法,scala类的定义还可以更简单一些,看一下下面这个CreditCard类的定义:

    更新中带来了不少新特性,主要涉及代码快速操作、性能提高和调试器新功能等内容。

    class CreditCard(val number: Int, var creditLimit: Int)
    

    getters 与 setters 增强

    是的,只用一行就完成了类的定义,连大括号都不需要。

    getters 与 setters 操作得到增强,现在除了为所有成员变量批量生成 getter 和 setter 之外,如果类具有多个字段,那么代码操作还将提示快速选择框,让开发者选择目标字段以生成访问者方法。

    因为scala也是运行在JVM上,可以考虑以java的方式来看看编译后的类文件。查看的方式还是比较灵活的,可以使用JD-GUI,也可以使用javap –private CreditCard命令,还有一个在线反编译的网站ShowMyCode。反编译后的Java代码:

    图片 1

    public class CreditCard {  public int number() {    return number;  }  public int creditLimit() {    return creditLimit;  }  public void creditLimit_$eq(int x$1) {    creditLimit = x$1;  }  public CreditCard (int number, int creditLimit) {    this.number = number;    this.creditLimit = creditLimit;    super ();  }  private final int number;  private int creditLimit;}
    

    同时,该操作还会考虑到 java.codeGeneration.generateComments 首选项,并使用它来决定是否为 getter 和 setter 方法生成注释。 

    好长的java代码。首先scala默认将CreditCard类转换为了public。因为在CreditCard.scala中将number声明为val,所以在反编译生成的java代码中,number被定义为final。此外在编译后的代码中还可以看到一个构造器以及读写成员变量的方法。可以看到成员变量的getter和setter与我们在java中习惯使用的命名方式有些不一致。此外由于number有final修饰符,因此就没有它的setter方法。如果scala中的成员变量的定义符号既不是var也不是val,那Scala就会为之创建一个private字段以及private getter和setter方法,也因此不能在类外部访问这个成员变量了。

    新增生成代理方法的操作

    放到类定义中的所有可执行语句或表达式都会被视为类的构造器的组成部分。下面的代码就是一个示例:

    图片 2

    class Sample {  println("You are constructing an instance of Sample")}new Sample
    

    生成构造函数新操作

    在这段代码中先定义了一个类Sample,随后又创建了一个Sample类的实例,执行看一下:

    这一个代码操作有助于从超类添加构造函数:

    图片 3

    图片 4

    在创建实例的时候输出了类定义中的print语句,因为这段print语句是构造器的一部分。

    将参数分配给新字段

    除了在主构造函数中提供成员变量,我们还可以在类里面定义其他字段、方法、零个或多个副构造函数。在下面这个类中在类里面定义了一个成员变量position、一个副构造函数this()、并且重写了toString()方法。

    图片 5

    class Person(val firstName: String, val lastName: String) {  private var position: String = _  println("Creating " + toString  def this(firstName: String, lastName: String, positionHeld: String) {    this(firstName, lastName)    position = positionHeld  }  override def toString(): String = {    firstName + "" + lastName + " holds " + position + " position "  }}val john = new Person("John", "Smith", "Analyst")printlnval bill = new Person("Bill", "Walker")println
    

    性能提升

    执行代码的结果如下:

    进行了一系列更改进一步提高了 VSCode 中 Java 的性能,包括修复 Windows 平台上的  I/O bug、减少具有深层模块和批量项目导入的大型项目的内存占用。官方表示,VSCode 是一个轻量级的编辑器,尽管添加了越来越多的功能,但仍然希望它有编辑器的样子

    图片 6

    调试器更新

    稍稍关注下副构造函数的实现:如果有主构造函数的话,那么副构造函数的第一行必须是主构造函数或者其它副构造函数的调用。这一点倒是和java继承父类时有点相似。

    这一部分的更新内容,包括几个方面:

    此外还值得注意的就是成员变量position的定义,把这一行单独拎出来看看吧:

    • 在变量窗口和悬停工具提示中显示更有意义的值:
    private var position: String = _
    

    图片 7

    首先比较有趣的是初始化赋值,赋值是一个“_”——下划线。在这里“_”代表相应类型的默认值。对于Int,它的值是0;对于Double,它的值是0.0;对于String,它的值就是null。通过使用“_”,可以很方便地为var成员变量设置初始默认值。不过不能为val成员使用“_”,因为val成员不允许修改,所以必须显式指定初始值

    • 工具栏中新增了一个 HCR(Hot Code Replace,热代码替换)按钮,并提供了一个新的调试配置项 java.debug.settings.hotCodeReplace

    通过查看Person.scala的字节码反编译出来的java类,可以看到scalac编译器为成员变量position默认设置了getter和setter方法(虽然没有按照我们习惯的JavaBean的方式进行设置)。scala中定义的成员变量的可见性在反编译出来的Java代码中由getter和setter方法的访问权限来控制。

    图片 8

    如果更喜欢传统的JavaBean式的注解,可以在成员变量定义时添加注解@BeanProperty:

    • 引入了一个选择 debug console 的全局配置选项 java.debug.settings.console,可以通过此配置设定默认 debug console,而不用再每次都去修改 launch.json。
    @BeanProperty  var position: String = _
    

    声明前记得导入注解。不过这也有一点限制:此时成员变量不可再声明为private。而且这样做只是会再额外生成两个JavaBean式的getter和setter,原来的getter和setter也会继续保留。这可以在编译Person类以后再用javap –private验证一下:

     "java.debug.settings.console": "integratedTerminal"
    

    图片 9

    此外还有关于 Maven 与 Test Runner 的细小更新内容,详情查看:

    就是这样。

    https://devblogs.microsoft.com/visualstudio/java-on-visual-studio-code-june-update

    #######

    本文由澳门新葡4473网站发布于项目,转载请注明出处:VSCode 6 月 Java 更新,编辑器就该有编辑器的样子

    关键词: