vscode是干啥用的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode是干啥用的相关的知识,希望对你有一定的参考价值。
参考技术Avscode是用来编辑代码的。
该编辑器集成了所有一款现代编辑器所应该具备的特性,包括语法高亮(syntax high lighting),可定制的热键绑定(customizable keyboard bindings),括号匹配(bracket matching)以及代码片段收集(snippets)。
Somasegar也告诉笔者这款编辑器也拥有对Git的开箱即用的支持,Microsoft Docs(微软文档)提供了相应的学习教程帮助用户在Visual Studio Code中登陆GitHub。
Visual Studio Code 提供了丰富的快捷键,用户可通过快捷键[Ctrl]+[K]+[S](按住Ctrl键不放,再按字母K键和S键)调出快捷键面板,查看全部的快捷键定义,也可在面板中双击任一快捷键,为某项功能指定新的快捷键。
这标志着微软公司第一次向开发者们提供了一款真正的跨平台编辑器,虽然完整版的Visual Studio仍然是只能运行在Windows和macOS(Mac OS X)之上,但是这一次的声明向我们展示了微软公司对于支持其他计算机平台的承诺。
以上内容参考:百度百科-Visual Studio Code
杰克逊中的@JsonTypeInfo 和@JsonSubTypes 是干啥用的
【中文标题】杰克逊中的@JsonTypeInfo 和@JsonSubTypes 是干啥用的【英文标题】:What are @JsonTypeInfo and @JsonSubTypes used for in jackson杰克逊中的@JsonTypeInfo 和@JsonSubTypes 是干什么用的 【发布时间】:2018-01-08 21:05:15 【问题描述】:Jackson 中使用的@JsonTypeInfo
和@JsonSubTypes
注释是什么?
public class Lion extends Animal
private String name;
@JsonCreator
public Lion(@JsonProperty("name") String name)
this.name = name;
public String getName()
return name;
public String getSound()
return "Roar";
public String getType()
return "carnivorous";
public boolean isEndangered()
return true;
@Override
public String toString()
return "Lion [name=" + name + ", getName()=" + getName() + ", getSound()=" + getSound() + ", getType()=" + getType() + ", isEndangered()="
+ isEndangered() + "]";
=========================================
public class Elephant extends Animal
@JsonProperty
private String name;
@JsonCreator
public Elephant(@JsonProperty("name") String name)
this.name = name;
public String getName()
return name;
public String getSound()
return "trumpet";
public String getType()
return "herbivorous";
public boolean isEndangered()
return false;
@Override
public String toString()
return "Elephant [name=" + name + ", getName()=" + getName() + ", getSound()=" + getSound() + ", getType()=" + getType()
+ ", isEndangered()=" + isEndangered() + "]";
===============================================
@JsonTypeInfo (use = JsonTypeInfo.Id.CLASS, include = As.PROPERTY, property = "classNameExtenral")
@JsonSubTypes (@Type (value = Lion.class, name = "lion"), @Type (value = Elephant.class, name = "elephant"))
public abstract class Animal
@JsonProperty ("name")
String name;
@JsonProperty ("sound")
String sound;
@JsonProperty ("type")
String type;
@JsonProperty ("endangered")
boolean endangered;
public static void main(String[] args)
Lion lion = new Lion("Simba");
Elephant elephant = new Elephant("Manny");
List<Animal> animals = new ArrayList<>();
animals.add(lion);
animals.add(elephant);
我的理解是,它还保留了被序列化的对象的具体类型以及实际数据。
我不清楚在反序列化过程中的实际优势/增益是什么。
除了 java 文档之外,没有得到任何重要的文档。任何人都可以在这里提供帮助或提供一些相同的文档。
【问题讨论】:
也许这个答案会有所帮助:***.com/a/31666888/751579 它有帮助..谢谢。 【参考方案1】:这些注释的目的是支持反序列化的多态性。当反序列化实际执行的代码时,将知道它所期望的类。例如,被反序列化为的某些字段的类型。但是,如果该类具有子类(即子类型),通用 Jackson 反序列化器如何知道被反序列化的字符串是哪个实际类?它必须创建某个具体类型(类或其子类之一)的实例并填充它。它可以知道要创建哪一个的唯一方法是该信息是否首先写入到序列化中。
正如this answer 所说,有三种方法可以做到这一点 - 您选择适合您的用例的一种。 @JsonTypeInfo
+ @JsonSubtypes
是其中一种方式 - 当您在编译时知道相关类可能存在的所有可能子类型时,它会非常有效。
【讨论】:
在各个具体类上使用@JsonTypeInfo 不是更有意义吗?在接口上使用它似乎违反了我认为的开闭原则(因为我们需要在每次添加具体实现时修改我们的接口)。如果这里遗漏了什么,请纠正我 同样,这取决于用例。例如,我有一个用例,实际上我可以在一个地方使用@JsonSubtypes,这比标记每个子类型更可取。但是TBH我忘记了那个用例现在是什么;我记得这有点不寻常。但它更多地与实际的部署/发布问题有关,而不是纯粹的 O-O 理论。 (请记住:像开-关这样的任何“原则”都只是一个强有力的指导方针......在某些情况下,您可能会发现违反这样的原则是正确的设计 - 只要确保您真的知道为什么。) 假设你有一个包含 Animal 类型字段的类 Cage。当 Cage 对象从 JSON 反序列化时,Jackson 发现它应该创建一个 Animal,因此如果 Animal 没有使用 @JsonTypeInfo 注释,Jackson 将不会应用对多态性的支持,因此它将只创建 Animal(如果可能)和不是它的子类型。以上是关于vscode是干啥用的的主要内容,如果未能解决你的问题,请参考以下文章