当前位置: 首页 > 科技观察

Java开发中如何自动填充SQL语句中的public字段

时间:2023-03-13 04:35:35 科技观察

很久以前,我们在写代码的时候,不得不仔细考虑变量的数据类型,比如下面的:枚举:虽然增加了枚举类型在JDK5中,但Class文件常量池中的CONSTANT_Class_info类型常量没有发生任何语义变化。它仍然是代表类或接口的符号引用。没有加入枚举,也没有加入“CONSTANT_Enum_info”等“枚举符号引用”常量。.因此,使用enum关键字定义常量,虽然从Java语法上看起来与使用class关键字定义类、使用interface关键字定义接口是一个级别,但实际上是一种错觉Javac编译器。从段代码来看,枚举只是一个普通的Java类,继承自java.lang.Enum,自动生成values()和valueOf()方法,所以枚举也归为引用类型。然而,到了JDK10,我们有了新的选择。在JDK10中,增加了var局部变量推断的功能。使用它,我们可以愉快地忘记数据类型。它是如何使用的?接下来我们一起来看看吧。1.使用比较下面我们就用比较的方式来体验一下var的作用。场景一:定义一个字符串旧的写法:Stringstr="Hello,Java.";新的写法:vars="Hello,Java.";PS:这里旧的写法是指JDK10之前的版本,新的写法是指JDK10之后的版本(包括JDK10)。场景二:旧的加法方式:intnum1=111;doublenum2=555.666d;doublenum3=num1+num2;System.out.println(num3);PS:遇到不同类型的加法(int+double)时,会发生数据类型upcast,所以num3会升级为double类型。新写法:varn1=111L;varn2=555.666;varn3=n1+n2;System.out.println(n3);场景三:Collection旧写法:Listlist=newArrayList<>();list.add("你好");list.add("Java");新写法:varlist=newArrayList<>();list.add("Hello");list.add("Java");场景四:循环旧的写法:for(Objectitem:list){System.out.println("item:"+item);}for(inti=0;i<10;i++){//dosomething...}新写法:for(varitem:list){System.out.println("item:"+item);}for(vari=0;i<10;i++){//dosomething...}场景5:使用Lambda的旧写法:Listflist=list.stream().filter(v->v.equals("Java")).collect(Collectors.toList());System.out.println(flist);新写法:varflist=list.stream().filter(v->v.equals("Java")).collect(Collectors.toList());System.out.println(flist);2.优势分析从上面的例子我们可以看出var有两个明显的优势:提高代码可读性和命名对齐。①提高可读性在我们使用var之前,如果类型的名字很长,会出现下面的情况:当限制每一行不能超过150个字符时,变量名会被推到下一行,所以整个代码的可读性变得很低。但是当我们使用var时,代码就变成了这样:varorderProcessor=createInternationalOrderProcessor(customer,order);从上面的代码可以看出,类型越长,var(可读性)的值就越大。②命名对齐不使用var时,遇到如下情况,代码如下://explicittypeNono=newNo();AmountIncreasemore=newBigDecimalAmountIncrease();Horizo??ntalConnectionjumping=newHorizo??ntalLinePositionConnection();Variablevariable=newConstant(6);Listnames=List.of("Java","中文社区");使用var之后,代码是这样的:varno=newNo();varmore=newBigDecimalAmountIncrease();varjumping=newHorizo??ntalLinePositionConnection();varvariable=newConstant(6);varnames=List.of("Java","中文社区");从上面的代码中我们可以看出,使用了var之后,命名对齐了,整个代码也变得更加优雅了。3.Userules&counterexamplesvar的实现来自于JEP286(改进提案286),详细地址:http://openjdk.java.net/jeps/286出自JEP286《局部变量类型推断》的标题,它可见,var只能用于局部变量声明,也就是说var必须满足以下条件:只能用于局部变量;它必须在声明时初始化;它不能用作方法参数和全局变量(类变量)。PS:因为var的实现要根据右边的代码进行类型推断,所以不能赋null或者不初始化。反例1:null的未初始化赋值反例2:中途改变类型反例3:全局变量反例4:作为返回值四、原理分析经过前面的使用,我们对var有了初步的了解,但是var的实现原理是什么呢?为了理解其原理,我们编译了如下代码(使用命令javacMainTest.java):然后我们用反编译工具打开编译后的类,发现var被替换成了某种数据类型,如下图:由此我们可以得出结论,var关键字的实现与其名称密切相关,var只是一种局部类型推断,只有在Java编码和编译期间才会有效,当类被编译为类文件时,var将成为某种数据类型(通过推理)。所以我们可以把var理解为笼统的Java语法糖,使用它可以让我们快速优雅的实现业务代码,但是var在字节码层面是不存在的。小结在本文中,我们介绍了var(局部类型推断)的使用,它可以用在局部变量、for、Lambda变量声明中,但不能用在全局变量声明中,也不能作为return方法的值,并且必须在声明时对其进行初始化(不能为其分配空值)。使用var可以有效提高代码的可读性和命名对齐。它的实现原理是在编译期通过等号右边的代码进行类型推断,然后将var替换为确定的数据类型。本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。