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

an网站建设网站建设方案 市场分析

an网站建设,网站建设方案 市场分析,做网站要具备哪些,淮北建筑大学lombok和maven在上一篇有关Lombok库的文章中 #xff0c;我描述了一个库#xff0c;该库有助于处理Java中的样板代码#xff08; 是的#xff0c;我知道这些问题已经在Kotlin中解决了 #xff0c;但这是现实生活#xff0c;我们不能一味地坐下来#xff0c;一旦出现较新… lombok和maven 在上一篇有关Lombok库的文章中 我描述了一个库该库有助于处理Java中的样板代码 是的我知道这些问题已经在Kotlin中解决了 但这是现实生活我们不能一味地坐下来一旦出现较新或更简单的语言请重写每个现有项目。 但是生活中有很多事情 Lombok项目有其替代方案。 让我们也给他们一个机会。 本文的代码示例可在此处和此处找到。 它实际上是Lombok的替代方案-因为您不能一次使用两者。 或者至少事实证明在同一个项目中同时使用IntelliJ IDEA和IntelliJ IDEA时您将遇到很多困难因为这是许多人真正选择的IDE因为这两个库处理批注处理的方式不同。 因此两个人都无法生存而另一个人则得以幸存这大约是哈利·波特和伏地魔的预言所表达的方式 。 因此我们已经知道使用Lombok批注的Person类的外观 Builder(toBuilder true) ToString EqualsAndHashCode AllArgsConstructor(access AccessLevel.PRIVATE) public class Person {NonNullGetterprivate final String lastName;NonNullGetterprivate final String firstName;NonNullGetterprivate final Integer age; } 如果我们创建一个新项目并按此处所述使用autovalue 则可以使用AutoValue Builders模仿几乎相同的模型 。 现在让我们看一下AutoValue模型的外观 package autovalue.model;import com.google.auto.value.AutoValue;AutoValue public abstract class Person {public abstract String lastName();public abstract String firstName();public abstract Integer age();public static Person create(String lastName, String firstName, Integer age) {return builder().lastName(lastName).firstName(firstName).age(age).build();}public static Builder builder() {return new AutoValue_Person.Builder();}AutoValue.Builderpublic abstract static class Builder {public abstract Builder lastName(String lastName);public abstract Builder firstName(String firstName);public abstract Builder age(Integer age);public abstract Person build();} } 您可以看到的是 肯定有更多的代码 。 Lombok生成带有单个注释的构建器时 AutoValue将使您创建自己的构建器代码-尽管不是全部。 基本上您定义接口后实现将由AutoValue生成的代码完成您不必实际实现getter和setter中的代码。 即使我们同意AutoValue getter接口不会比Lombok字段定义花费更多的时间或空间但是对于某些人来说编写AutoValue构建器代码仍然是一件麻烦事。 但是它可以提供更大的灵活性 因为您实际上可以更改构建器方法名称。 此外 代码分析和使用情况搜索是一个巨大的胜利–这样您实际上可以分别查找实际的getter和setter的用法这对开发人员也可能很重要。 实例的创建方法与Lombok相同。 final Person anna Person.builder().age(31).firstName(Anna).lastName(Smith).build(); 我们所有的测试都在代码更改最少的情况下运行主要是因为AutoValue无法将实例转换为构建器或者至少我不容易找到它因此复制只是调用静态工厂方法 package autovalue.model;import org.junit.Test;import static org.assertj.core.api.Java6Assertions.assertThat;public class PersonTest {private static Person JOHN Person.builder().firstName(John).lastName(Doe).age(30).build();private static Person JANE Person.builder().firstName(Jane).lastName(Doe).age(30).build();Testpublic void testEquals() throws Exception {Person JOHN_COPY Person.create(JOHN.lastName(), JOHN.firstName(), JOHN.age());assertThat(JOHN_COPY).isEqualTo(JOHN);}Testpublic void testNotEquals() throws Exception {assertThat(JANE).isNotEqualTo(JOHN);}Testpublic void testHashCode() throws Exception {Person JOHN_COPY Person.create(JOHN.lastName(), JOHN.firstName(), JOHN.age());assertThat(JOHN_COPY.hashCode()).isEqualTo(JOHN.hashCode());}Testpublic void testHashCodeNotEquals() throws Exception {Person JOHN_COPY Person.create(JOHN.lastName(), JOHN.firstName(), JOHN.age());assertThat(JOHN_COPY.hashCode()).isNotEqualTo(JANE.hashCode());}Testpublic void testToString() throws Exception {String jane JANE.toString();assertThat(jane).contains(JANE.lastName());assertThat(jane).contains(JANE.firstName());assertThat(jane).contains( JANE.age());assertThat(jane).doesNotContain(JOHN.firstName());}} 其他显而易见的区别 您编写的AutoValue类始终是抽象的。 它们在AutoValue生成的代码中实现。 AutoValue类是自动不可变的。 有一种解决方法使它们具有不可变类型的属性 。 即使您明确希望在实例上具有setter 也不能 。 为什么要使用AutoValue AutoValue的创建者会谨慎地在此处描述该库的收益甚至就此创建一个完整的演示文稿 。 该库还使用Java注释处理器来生成简单安全和一致的值对象。 好吧与前两个相同。 还有什么是新的 让我们来看看。 最简单的值类如下所示。 package immutables.model;import org.immutables.value.Value;Value.Immutable public abstract class Person {public abstract String lastName();public abstract String firstName();public abstract Integer age(); } 因此具有抽象类的相同原理仅在生成的代码中实现。 为此您需要启用IDE注释处理器 就像对Lombok一样 但对于AutoValue则不需要因为它是由gradle插件完成的。 那么对象创建的外观如何 final Person anna ImmutablePerson.builder().age(31).firstName(Anna).lastName(Smith).build(); System.out.println(anna); 乍一看最明显的区别是 我们不声明构建器方法。 静态的builder / factory方法不是在我们自己的类上创建的而是在生成的类上创建的。 与AutoValue一样无法在类上生成生成器只能在生成器上生成。 生成的类也自动 -ers就是实例方法允许通过改变一个属性来创建实例的副本补充说 final ImmutablePerson anna ImmutablePerson.builder().age(31).firstName(Anna).lastName(Smith).build(); System.out.println(anna);final ImmutablePerson annaTheSecond anna.withAge(23).withLastName(Smurf); System.out.println(annaTheSecond); 该构建器具有自动添加的from方法该方法允许创建实例的精确副本并且在生成的类上还有一个生成的静态copyOf方法 Person JOHN_COPY ImmutablePerson.builder().from(JOHN).build(); // OR Person JOHN_COPY ImmutablePerson.copyOf(JOHN); 同样我们的测试运行时所做的更改很小主要是关于如何复制实例的 package immutables.model;import org.junit.Test;import static org.assertj.core.api.Assertions.assertThat;public class PersonTest {private static Person JOHN ImmutablePerson.builder().firstName(John).lastName(Doe).age(30).build();private static Person JANE ImmutablePerson.builder().firstName(Jane).lastName(Doe).age(30).build();Testpublic void testEquals() throws Exception {//ImmutablePerson JOHN_COPY ImmutablePerson.builder().from(JOHN).build();Person JOHN_COPY ImmutablePerson.copyOf(JOHN);assertThat(JOHN_COPY).isEqualTo(JOHN);}Testpublic void testNotEquals() throws Exception {assertThat(JANE).isNotEqualTo(JOHN);}Testpublic void testHashCode() throws Exception {Person JOHN_COPY ImmutablePerson.copyOf(JOHN);assertThat(JOHN_COPY.hashCode()).isEqualTo(JOHN.hashCode());}Testpublic void testHashCodeNotEquals() throws Exception {Person JOHN_COPY ImmutablePerson.copyOf(JOHN);assertThat(JOHN_COPY.hashCode()).isNotEqualTo(JANE.hashCode());}Testpublic void testToString() throws Exception {String jane JANE.toString();assertThat(jane).contains(JANE.firstName());assertThat(jane).contains(JANE.lastName());assertThat(jane).contains( JANE.age());assertThat(jane).doesNotContain(JOHN.firstName());}} 关于Immutables库还有很多要说的因此这里有一本相当大的手册 。 在本文中我们仅对表面进行了一些刮擦。 例如有关使用Immitables和样式自定义 方法前缀构建器名称等以及甚至为Mongo生成存储库以便将文档视为不可变对象的 JSON序列化的更多细节。 但是这比我在这篇简单文章中所涉及的要多得多。 要解决的问题是尚未普及的Java语言的挑战之一就是冗长和样板代码。 但是有很多工具可以处理它并且可以选择最合适的库而不是通过复制粘贴或尝试编写自己的代码生成器进行编码。 好好利用它们。 好好用 翻译自: https://www.javacodegeeks.com/2018/03/lombok-autovalue-and-immutables-or-how-to-write-less-and-better-code-returns.htmllombok和maven
http://wiki.neutronadmin.com/news/172699/

相关文章:

  • 做设计做网站义乌专业做网站的
  • 各网站收录做淘宝首页初学ps视频网站
  • 我们做网站 老公弟弟也跟着做怎么找网红合作卖东西
  • 昭通做网站公司阿里云服务器建立网站吗
  • 做视频网站用什么格式大英做网站
  • Wordpress 搜索自动补全优化推广公司哪家好
  • 网页制作合同样本长沙网站seo技术
  • 如何自助建网站一站式建网站怎么做网页app
  • 有什么手机网站杭州门户网站建设
  • 搭建网站 开源软件手机ftp上传wordpress
  • 数据库跟网站内容2024最近爆发的流感叫什么
  • 越南做It网站推广怎样做安居客网站
  • d?t网站模版企业网站空间在哪里
  • 网站建设基本目标企业网站标题设置
  • 红河县网站建设学术会议网站建设
  • 计算机网站开发工作证怎样推销网站建设
  • 石家庄高端外贸建站如何做国外的电商网站设计
  • 长沙网站建设外贸宣传片拍摄计划方案
  • 无锡网站搜索优化首页模板
  • 班级网站 php站长忽略的观点
  • 做教学的视频网站有哪些问题门户网站首页设计
  • 会计题库网站怎么做开发公司与物业公司前期合同
  • 江油网站网站建设安顺建设局网站
  • php网站怎么做后台管理今天的三个新闻
  • 六安人论坛最新招聘信息在线seo推广软件
  • wordpress建站侵权怎样是做网站
  • 沈阳网站建设模块维护新网域名证书下载
  • 网站建设平台计划书中宁网站建设公司
  • 江门做网站软件申请网页的注意事项
  • 安徽动漫公司 网站制作 安徽网新linux网站建设技术指南