java常见的ide_在三个Java IDE中生成的三种常见方法

java常见的ide

在本文中,我研究了NetBeans 8.0.2 , IntelliJ IDEA 14.0.2和Eclipse Luna 4.4.1生成的三种“通用”方法[ equals(Object) , hashCode()和toString() ]的区别 。 。 目的不是确定哪种方法最好,而是要说明可以用于实现这些通用方法的不同方法。 在此过程中,可以基于IDE的假设收集一些有趣的见解,以创建这些通用方法,并提示开发人员进行设置。



NetBeans 8.0.2

netbeans802

NetBeans 8.0.2允许将项目属性配置为支持JDK 8平台,并期望JDK 8源格式,如以下两个屏幕快照所示。

netbeans802_projectProperties_Libraries_JavaPlatform8

netbeans802_projectProperties_Sources_sourceFormat8

在NetBeans 8.0.2中,通过单击“源” |“生成”来生成代码。 插入代码(或击键Alt + Insert)。

netbeans802_source_insertCode_alt插入

在生成方法equals(Object)hashCode()toString() ,NetBeans 8.0.2要求在每个生成的方法中使用属性,如以下两个屏幕快照所示。

netbeans802_generateEqualsAndHashCode

netbeans802_generateToString

NetBeans生成的方法利用了JDK 7引入的 Objects类。

NetBeans802NetratedCommonMethods.java类的NetBeans生成的hashCode()方法

@Override
public int hashCode()
{int hash = 5;hash = 29 * hash + Objects.hashCode(this.someString);hash = 29 * hash + Objects.hashCode(this.timeUnit);hash = 29 * hash + this.integer;hash = 29 * hash + Objects.hashCode(this.longValue);return hash;
}

NetBeans802NetratedCommonMethods.java类的NetBeans生成的equals(Object)方法

@Override
public boolean equals(Object obj)
{if (obj == null){return false;}if (getClass() != obj.getClass()){return false;}final NetBeans802GeneratedCommonMethods other = (NetBeans802GeneratedCommonMethods) obj;if (!Objects.equals(this.someString, other.someString)){return false;}if (this.timeUnit != other.timeUnit){return false;}if (this.integer != other.integer){return false;}if (!Objects.equals(this.longValue, other.longValue)){return false;}return true;
}

NetBeans802NetratedCommonMethods.java类的NetBeans生成的toString()方法

@Override
public String toString()
{return "NetBeans802GeneratedCommonMethods{" + "someString=" + someString + ", timeUnit=" + timeUnit + ", integer=" + integer + ", longValue=" + longValue + '}';
}

关于NetBeans生成的通用方法,可以观察到以下几点:

  • 除操作员选择的方法中使用的字段外,所有生成的代码都是自动的,不支持自定义。
  • 所有这些扩展Object类中对应项的通用方法都会自动提供@Override注释。
  • 没有Javadoc文档包含生成的方法。
  • 这些方法利用Objects类使生成的代码更简洁,而对null检查的需求则更少。
  • toString()生成的String仅支持一种格式,并且该输出格式为单个逗号分隔的行。
  • 我没有在上面的示例中显示它,但是在某些情况下,NetBeans 8.0.2的方法生成确实将数组与引用,枚举和基元区别对待:
    • 生成的toString()方法像对待其他实例属性一样对待实例的数组属性:它依赖于数组的toString() ,这通常导致不希望的且通常无用的结果(数组的系统标识哈希码 )。

IntelliJ IDEA 14.0.2

对于这些示例,我正在使用IntelliJ IDEA 14.0.2 Community Edition 。

idea_1402

IntelliJ IDEA 14.0.2提供了配置项目结构以期望JDK 8的“语言级别”的能力。

idea14_ProjectStructure_LanguageLevel_8

要在IntelliJ IDEA 14.0.2中生成代码,可以使用Code | 生成选项(或击键Alt + Insert(如NetBeans))。

idea14_codeGenerateAltInsert

IntelliJ IDEA 14.0.2提示操作员应在生成的方法中包括哪些属性。 它还询问哪些字段非空,这意味着假定哪些字段永远不会为空。 在此处显示的快照中,将对它们进行检查,这将导致方法在尝试访问它们之前不检查这些属性是否为null。 但是,在我用IntelliJ IDEA为本章生成的代码中,我将没有选中这些代码,这意味着IntelliJ IDEA将在生成的方法中访问它们之前检查null。

idea14_codeGenerateEqualsAndHashCode_Equals

idea14_codeGenerateEqualsAndHashCode_HashCode

idea14_codeGenerateEqualsAndHashCode_NotNull

IntelliJ IDEA 14.0.2的toString()生成为生成的toString()方法提供了冗长的格式(模板)列表。

idea14_codeGenerateToStringTemplateOptions

IntelliJ IDEA 14.0.2还允许操作员选择要包含在生成的toString()方法中的属性(突出显示的背景为蓝色时选择)。

idea14_codeGenerateToStringHighlightedAttributesBlueBackground

类Idea1402GeneratedCommonMethods.java的IDEA生成的equals(Object)方法

public boolean equals(Object o)
{if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Idea1402GeneratedCommonMethods that = (Idea1402GeneratedCommonMethods) o;if (integer != that.integer) return false;if (longValue != null ? !longValue.equals(that.longValue) : that.longValue != null) return false;if (someString != null ? !someString.equals(that.someString) : that.someString != null) return false;if (timeUnit != that.timeUnit) return false;return true;
}

类Idea1402GeneratedCommonMethods.java的IDEA生成的hashCode()方法

@Override
public int hashCode()
{int result = someString != null ? someString.hashCode() : 0;result = 31 * result + (timeUnit != null ? timeUnit.hashCode() : 0);result = 31 * result + integer;result = 31 * result + (longValue != null ? longValue.hashCode() : 0);return result;
}

类Idea1402GeneratedCommonMethods.java的IDEA生成的toString()方法

@Override
public String toString()
{return "Idea1402GeneratedCommonMethods{" +"someString='" + someString + '\'' +", timeUnit=" + timeUnit +", integer=" + integer +", longValue=" + longValue +'}';
}

可以观察到有关IntelliJ IDEA生成的常见方法:

  • 大多数生成的代码都是自动的,并且具有少量可用的自定义功能,包括操作员选择的方法中使用的字段,期望哪些字段为非空的规范(以便在生成的代码中不需要空检查)以及选择的能力八种内置toString()格式之一。
  • 所有这些扩展Object类中对应项的通用方法都会自动提供@Override注释。
  • 没有Javadoc文档包含生成的方法。
  • 生成的方法不使用Objects类,因此需要对所有可能为null的引用进行显式检查是否为null。
  • 上面的示例中没有显示,但是IntelliJ IDEA 14.0.2在这三种常见方法的生成中确实以不同的方式对待数组:
    • 生成的toString()方法在数组上使用Arrays.toString(Array) 。

Eclipse Luna 4.4.1

Eclipse

Eclipse Luna 4.4.1允许将“项目属性”中的Java编译器设置为JDK 8。

eclipse441_ProjectProperties_JavaCompiler

在Eclipse Luna中,开发人员使用“源”下拉菜单选择要执行的特定类型的源代码生成。

eclipse441_Source_GenerateHashCodeAndEquals

Eclipse Luna允许操作员选择要包含在常用方法中的属性。 它还允许操作员指定所生成方法的一些特征。 例如,操作员可以选择在生成的toString()方法中单独打印数组的元素,而不是使用通常无意义的类名和系统标识哈希码。

eclipse441_GenerateHashCodeEquals

eclipse441_GenerateToString

类Eclipse441GeneratedCommonMethods.java的Eclipse生成的hashCode()方法

/* (non-Javadoc)* @see java.lang.Object#hashCode()*/
@Override
public int hashCode()
{final int prime = 31;int result = 1;result = prime * result + this.integer;result = prime * result+ ((this.longValue == null) ? 0 : this.longValue.hashCode());result = prime * result+ ((this.someString == null) ? 0 : this.someString.hashCode());result = prime * result+ ((this.timeUnit == null) ? 0 : this.timeUnit.hashCode());    return result;
}

类Eclipse441GeneratedCommonMethods.java的Eclipse生成的equals(Object)方法

/* (non-Javadoc)* @see java.lang.Object#equals(java.lang.Object)*/
@Override
public boolean equals(Object obj)
{if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Eclipse441GeneratedCommonMethods other = (Eclipse441GeneratedCommonMethods) obj;if (this.integer != other.integer)return false;if (this.longValue == null){if (other.longValue != null)return false;} else if (!this.longValue.equals(other.longValue))return false;if (this.someString == null){if (other.someString != null)return false;} else if (!this.someString.equals(other.someString))return false;if (this.timeUnit != other.timeUnit)return false;return true;
}

类Eclipse441GeneratedCommonMethods.java的Eclipse生成的toString()方法

/* (non-Javadoc)* @see java.lang.Object#toString()*/
@Override
public String toString()
{return "Eclipse441GeneratedCommonMethods [someString=" + this.someString+ ", timeUnit=" + this.timeUnit + ", integer=" + this.integer+ ", longValue=" + this.longValue + "]";
}

关于Eclipse生成的通用方法,可以观察到以下几点:

  • Eclipse在生成过程中提供了最多的点,可以在其中配置所生成的输出。 以下是一些可配置的选项:
    • 可以明确指定类中的位置(在类的现有方法之前或之后)。
  • 所有这些扩展Object类中对应项的通用方法都会自动提供@Override注释。
  • 生成的方法不使用Objects类,因此需要对所有可能为null的引用进行显式检查是否为null。
  • 当生成本文中突出显示的三种常用方法时,Eclipse Luna 4.4.1确实会以不同的方式对待数组:
    • 生成的toString()可以选择使用Arrays.toString(Object[])或重载版本来访问数组的内容。

结论

这篇文章中介绍的所有三个IDE(NetBeans,IntelliJ IDEA和Eclipse)都会生成常见方法equals(Object)hashCode()toString()合理实现,但是这些生成的方法在可定制性之间存在差异。三个IDE。 可用的不同定制和生成的不同实现可以为Java新手提供课程,以了解和考虑实现这些方法。 虽然这些IDE生成这些方法的能力最明显和最显着的优点是与自动生成相关的时间节省,但是这些方法的IDE生成的其他优点包括能够学习实现这些方法的能力以及成功实现的可能性更大。没有错别字或其他错误。

翻译自: https://www.javacodegeeks.com/2014/12/three-common-methods-generated-in-three-java-ides.html

java常见的ide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度linux安装依赖,Linux -- Ubuntu下载deepin wine依赖问题笔记

问题开始下载deepin-wine安装包, 请稍后…1.1udis86_1.72-2_i3 100%[>] 34.18K 87.3KB/s 用时 0.4s1.2deepin-fonts-win 15%[> ] 31.18K 1.72KB/s 用时 18s1.2deepin-fonts-win 100%[>] 207.88K 26.2KB/s 用时 6.7s2.1deepin-libwine_2 100%[>] 18.97M 132KB/s 用时…

什么是C语言中的隐式函数声明?

「1、什么是C语言的隐式函数声明」在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。下面是一个例子:int main(int argc, char** argv) {double x a…

群晖 上传 源文件不存在_群晖NAS连接百度网盘报错?原因是这样的

群晖NAS附带的云同步套件可以与国内外多个网盘连接 , 连接后可从云上下载数据亦可从本地将数据上传到云上。例如通过云同步套件连接百度网盘账号后可以便捷上传和下载数据 , 若网盘空间较大甚至可用来备份整个NAS等。不过现在看来群晖与百度网盘的合作似乎已经结束,…

ssl/tls服务器瞬时_SSL / TLS REST服务器–带有Spring和TomEE的客户端

ssl/tls服务器瞬时在构建系统时,开发人员通常会忽略安全性方面。 安全一直是令人担忧的重要问题,但是它比以前吸引了更高的关注。 就在今年,我们发生了像Heartbleed Bug或CelebrityGate丑闻这样的案件。 这与帖子无关,只是安全真正…

linux kvm百度云,容器与云|如何在 Ubuntu Linux 上使用 KVM 云镜像

如何下载并使用运行在 Ubuntu Linux 服务器上的 KVM 云镜像?如何在 Ubuntu Linux 16.04 LTS 服务器上无需完整安装即可创建虚拟机?如何在 Ubuntu Linux 上使用 KVM 云镜像?基于内核的虚拟机(KVM)是 Linux 内核的虚拟化模块,可将其…

C 的16个大坑,你能躲过几个?

首先说下C 和C语言有什么区别?分享一个我在知乎上看见的回答:C ≈ C with classes, C with STLC:面向机器编程C :面向编译器编程C 有个很重要的特性叫RAII,个人认为可以多多使用,相当方便。言归…

java 性能调优_Java性能调优调查结果(第三部分)

java 性能调优这是本系列文章的第三篇,我们将分析2014年10月进行的调查的结果。如果您尚未这样做,我建议从本系列的前两篇文章开始: 问题严重性分析和监视域分析 。 这篇文章着重于故障排除/根本原因检测。 本调查部分的背景:意识…

不懂指针类型,7个例子给你讲明白

1. int va;这是一个整型变量,32位CPU的话,占有32个bite2. int *va;这是一个整型指针变量,用于存放一个整型变量的地址,3. int **va;这是一个整型的二级指针,用于存放一个内存的地址,该地址对应的内存中存放…

Tomcat与Netty比较

Tomcat介绍Tomcat支持的协议Tomcat的优缺点Netty介绍Netty支持的协议Netty的优点和缺点Tomcat和Netty的区别Tomcat和Netty的应用场Tomcat和Netty来处理大规模并发连接的优化Tomcat与Netty的网络模型的区别Tomcat与Netty架构设计拓展 Tomcat介绍 Tomcat是一个免费的、开放源代码…

C或C 如何通过程序执行shell命令并获取命令执行结果?

1 应用场景最近在实际程序开发中,需要通过程序执行 shell 命令,并获取命令输出内容。但是系统自带的 system 只能返回命令执行成功与否,不能捕获命令输出。2 扩展性由于应用场景本就广泛,因此扩展性较好。此函数可以执行任意命令&…

linux centos7安装ngix,centos7 环境下安装nginx--Linux

本文将要为您介绍的是centos7 环境下安装nginx--Linux,具体完成步骤:一、安装前需要的编译环境准备1、安装makeyum install -y gcc automake autoconf libtool make2、安装gcc、gcc-cyum install -y gcc gcc-c3、关闭防火墙iptables -F4、关闭selinux#临时关闭:sete…

primefaces_使用PrimeFaces开发数据导出实用程序

primefaces我的日常工作涉及大量使用数据。 我们使用关系数据库来存储所有内容,因为我们依赖于企业级的数据管理。 有时,具有将数据提取为简单格式(例如电子表格)的功能很有用,以便我们可以按需进行操作。 这篇文章概述…

如何优雅地实现判断一个值是否在一个集合中?

如何判断某变量是否在某个集合中&#xff1f;注意&#xff0c;这里的集合可能并不是指确定的常量&#xff0c;也可能是变量。版本0#include int main(){int a 5;if(a 1 || a 2 || a 3 || a 4 || a 5){std::cout<<"find it"<<std::endl;}return 0;…

骚操作:利用强弱符号制作插件库

当有强符号和弱符号时&#xff0c;选择使用强符号那么我们正可以利用这个原则做以下事情&#xff1a;定义为弱符号&#xff0c;如果是弱符号&#xff0c;使用默认行为如果链接了库&#xff0c;是强符号&#xff0c;则使用外部定义行为以此来实现一个类似插件的功能。通俗一点说…

c语言里 t是什么作用,c语言里的\t是什么意思

c语言里的&#xff3c;t是什么意思以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;c语言里的&#xff3c;t是什么意思正宗叫法是“水平制表符”&#xff0c;就是在输出媒体上水平跳过多个空格…

函数或全局变量重复定义时会怎样?

可能有些朋友第一反应是&#xff0c;那肯定是编译不过喽&#xff1a;// fun.c #include void func() {printf("编程珠玑\n"); }// main.c #include void func() {printf("公众号\n"); } int main(void) {func();return 0; }编译&#xff1a;$ gcc -o main …

当C语言函数执行成功时,返回1和返回0究竟哪个好?

基本上&#xff0c;没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高&#xff0c;耦合性低的原则&#xff0c;尽可能的将代码拆分不同的功能模块&#xff0c;并封装成函数。C语言代码的组合千变万化&#xff0c;因此函数的功能可能会比较复杂&#xf…

ubuntu自定义安装里怎么选_超市里的五香粉怎么选?看懂配料表,两个小技巧,不怕选不好。...

点击右上角【关注】&#xff0c;可获得本头条号推荐的更多美食干货五香粉是家庭常用的一种调味料&#xff0c;焖、炖、烧、煮、卤都常备使用&#xff0c;如今市场上的五香粉品牌也是相当繁多&#xff0c;质量也是参差不齐&#xff0c;有时买到的五香粉烧制的菜肴根本就不好吃&a…

原来C语言还可以这样实现“泛型编程”!

在回答标题问题之前&#xff0c;先了解下什么是泛型编程。泛型编程&#xff08;generic programming&#xff09;是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型&#xff0c;在实例化时作为参数指明这些类型。C支持…

javadoc 标签_新的Javadoc标签@ apiNote,@ implSpec和@implNote

javadoc 标签如果您已经在使用Java 8&#xff0c;则可能会看到一些新的Javadoc标签&#xff1a; apiNote &#xff0c; implSpec和implNote 。 他们怎么了&#xff1f; 如果要使用它们&#xff0c;该怎么办&#xff1f; 总览 该帖子将快速查看标签的来源和当前状态。 然后&…