当前位置: 首页 > news >正文

自己做的网站网页错位怎样在网站做两份简历

自己做的网站网页错位,怎样在网站做两份简历,烟台教育网站建设,深圳网络营销的推广1. 背景​ 之前在专栏中讲过“不推荐使用属性拷贝工具”#xff0c;推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。 不推荐的主要理由是#xff1a; 有些属性拷贝工具性能有点差有些属性拷贝工具有“BUG”使用属性拷贝工具容易存在一些隐患#xff08…1. 背景​ 之前在专栏中讲过“不推荐使用属性拷贝工具”推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。 不推荐的主要理由是 有些属性拷贝工具性能有点差有些属性拷贝工具有“BUG”使用属性拷贝工具容易存在一些隐患后面例子会讲到 2. 示例 首先公司内部就遇到过 commons 包的 BeanUtils 进行属性拷贝性能较差的真实案例然后该同事换成了 Spring 的 BeanUtils 性能好了很多感兴趣大家可以使用性能测试框架或者基准测试框架去对比这里就不对比了。 接下来我们看 Spring 的 BeanUtils 的属性拷贝会存在啥问题 import lombok.Data;import java.util.List;Data public class A {private String name;private ListInteger ids; } Data public class B {private String name;private ListString ids; } import org.springframework.beans.BeanUtils;import java.util.Arrays;public class BeanUtilDemo {public static void main(String[] args) {A first new A();first.setName(demo);first.setIds(Arrays.asList(1, 2, 3));B second new B();BeanUtils.copyProperties(first, second);for (String each : second.getIds()) {// 类型转换异常System.out.println(each);}} } 大家运行上述示例时会发生类型转换异常。 打断点可以看到属性拷贝之后 B 类型的 second 对象中 ids 仍然为 Integer 类型 如果不转换为字符串直接进行打印并不会报错。 使用CGlib 在不定义Converter 的情况下也会遇到类似问题 import org.easymock.cglib.beans.BeanCopier;import java.util.Arrays;public class BeanUtilDemo {public static void main(String[] args) {A first new A();first.setName(demo);first.setIds(Arrays.asList(1, 2, 3));B second new B();final BeanCopier beanCopier BeanCopier.create(A.class, B.class, false);beanCopier.copy(first,second,null);for (String each : second.getIds()) {// 类型转换异常System.out.println(each);}} } 同样问题在运行时才暴露出来。 接下来我们看下 mapstruct import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers;Mapper public interface Converter {Converter INSTANCE Mappers.getMapper(Converter.class);B aToB(A car); } import java.util.Arrays;public class BeanUtilDemo {public static void main(String[] args) {A first new A();first.setName(demo);first.setIds(Arrays.asList(1, 2, 3));B second Converter.INSTANCE.aToB(first);for (String each : second.getIds()) {// 正常System.out.println(each);}} } 可以成功的将 A 中 ​​ListInteger​​​ 转为 B 中的 ​​ListString​​ 类型。 我们看下编译生成的 Converter 实现类 import java.util.ArrayList; import java.util.List; import javax.annotation.Generated; import org.springframework.stereotype.Component;Generated(value org.mapstruct.ap.MappingProcessor,comments version: 1.3.1.Final, compiler: javac, environment: Java 1.8.0_202 (Oracle Corporation) ) Component public class ConverterImpl implements Converter {Overridepublic B aToB(A car) {if ( car null ) {return null;}B b new B();b.setName( car.getName() );b.setIds( integerListToStringList( car.getIds() ) );return b;}protected ListString integerListToStringList(ListInteger list) {if ( list null ) {return null;}ListString list1 new ArrayListString( list.size() );for ( Integer integer : list ) {list1.add( String.valueOf( integer ) );}return list1;} } 自动帮我们进行了转换我们可能没有意识到类型并不一致。 如果我们在 A 类中添加一个 String number 属性在 B 类中添加一个 Long number 属性使用 mapstruect 当 number 设置为非数字类型时就会报 ​​.NumberFormatException​​ 。 Overridepublic B aToB(A car) {if ( car null ) {return null;}B b new B();b.setName( car.getName() );if ( car.getNumber() ! null ) { // 问题出在这里b.setNumber( Long.parseLong( car.getNumber() ) );}b.setIds( integerListToStringList( car.getIds() ) );return b;} 使用 cglib 默认则不会映射 number 属性B 中的 number 为 null。 如果手动定义转换器使用 IDEA 插件(如 generateO2O)自动转换 public final class A2BConverter {public static B from(A first) {B b new B();b.setName(first.getName());b.setIds(first.getIds());return b;} } 在编码阶段就可以非常明确地发现这个问题 3. 结论 由于 Java 的泛型其实是编译期检查编译后泛型擦除导致运行时 ​​ListInteger​​​ 和 ​​ListString​​ 都是 List 类型可以正常赋值。这就导致在使用很多属性映射工具时编译时不容易明显的错误。 mapstruct 自定义了注解处理器在编译阶段可以读取映射双方的泛型类型进而进行映射。但是这种映射也很可怕有时候我们由于粗心等原因定义错了类型自动帮助我们进行了转换会带了很多副作用。 之前对各种属性映射工具的性能进行了简单的对比结果如下 因此慎用属性转换工具如果可能建议自定义转换类使用 IDEA插件自动填充效率也挺高 A 或 B 中任何属性类型不匹配甚至删除一个属性编译阶段即可报错而且直接调用 get set 的效率也是非常高的。
http://www.hkea.cn/news/14519895/

相关文章:

  • 网站备案网站简介建设网站需要有什么特色
  • 广告公司运作模式网站的优化怎么做
  • 哪些网站是做婴童辅食招商的优化搜狐的培训
  • 陕西省交通建设公司网站学校校园网站建设实践选题背景
  • wordpress 403网站建设丶seo优化
  • 房产网站如何做做公司网站的公
  • 广州网络推广建站三种分销渠道
  • 做网站宣传费用记什么科目如何建造自己的网站
  • 做一个网站的详细教学郑州seo顾问
  • 湖州网站开发区火炬手网站建设技术参数
  • 注册公司网站如何注册做网站电子版报价模板
  • 海曙网站建设哪家好网站风格变化
  • 赚钱的网站平台如何找外包的销售团队
  • 网站建设教育seo怎么优化效果更好
  • 石家庄做标书的网站上海营销咨询公司
  • 网站代搭建维护wordpress免费教育机构主题
  • 一台云服务器做多个网站建设银行打印回单网站
  • 工信部网站备案号查询h5″wordpress
  • 北京 公司网站 备案中 开通访问网页开发流程图
  • 室内设计师网站十大网站两个人看的视频在线观看
  • 漯河建网站做网站优化两年遇到的SEO常态
  • 电子商务网站建设内容wordpress 上传图片不显示
  • 怎么制作ppt幻灯片长沙seo管理
  • 网站建设 入门知识ai效果图制作教程
  • 小米网站 用什么做的全国工程信息查询平台
  • p2p视频网站建设wordpress横幅
  • 怎么提高网站加载速度慢网站备案关闭网站
  • 深圳工程网站建设公司手机网站模板
  • 技术支持东莞网站建设机械有创意广告店名字大全
  • 完整个人网站html免费网址大全