Java 7的类型推断

每个优秀的程序员都喜欢编写简洁但有效且经过优化的代码。 类型推断是JDK 7中引入的一种方法,它肯定会为您带来更少键入的好处。 您以以下方式使用Java代码已有很长时间了。

但是,在初始化Collections的特定实现时,您是否曾经想到过代码重复? 为什么在初始化期间需要两次写入参数?

List<string> names = new ArrayList<string>();
Map<string, Object> objectMap = new HashMap<string, Object>();
现在,大多数人都将考虑像在以前的JDK版本中一样将其初始化为原始类型。

这样的东西。

List<string> names = new ArrayList();
Map<string, object=""> objectMap = new HashMap();

那么JDK 7中有什么新功能? 您将从新功能中获得什么好处?
因此,首先我们需要了解原始类型和通用类型初始化之间的区别。

这样的语句可确保实现包含初始化期间指定的相同参数。

List<string> names = new ArrayList<string>();

在以下示例中,编译器生成未经检查的转换警告,因为HashMap()构造函数引用的是HashMap原始类型,而不是Map<String, List<String>>类型:

Map<String, List<String>> myMap = new HashMap(); // unchecked conversion warning

钻石算子
 
好的,现在我将介绍JDK 7的新功能。 因此,JDK 7中有一个称为Diamond运算符的东西,它可以减少初始化时的额外键入。

句法:

List<string> names = new ArrayList<>();

因此,它不仅减少了您的代码,而且确保了类型检查。
这是一个更清晰的示例,解释了类型推断的好处。

高级示例:

class Demo {
void printStudentNames(List<string> names) {
for(String name:names) {
System.out.println("String name:"+name);
}
}public static void main(String[] args) {
Demo demo = new Demo();
demo.printStudentNames(new ArrayList<>());   // It saved typing here in a method call too.
List<string> names = new ArrayList<>();
printStudentNames(names);
List<string> copyOfNames = new ArrayList<>(names);  // It saved typing here in a copy contructor invocation too.
}
}

现在有什么限制?
如果您使用通配符,它​​将不起作用。

像这样

Class Tree<t> {public void demoFunction(List<t> objList) {
List<t> copyOfNames = new ArrayList<t>(objList);   //This is not gonna work.
}
}

在上述情况下,在复制构造函数中传递的参数应为Collection <? 扩展T>
因此它不会接受上述推断类型。

参考: 为什么我们需要Java 7中的类型推断? 来自我们的JCG合作伙伴 Saurab Parakh在Coding is Cool博客上。


翻译自: https://www.javacodegeeks.com/2012/05/type-inference-from-java-7.html

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

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

相关文章

python实现胶囊网络_胶囊网络 -- Capsule Networks

胶囊网络是 vector in vector out的结构&#xff0c;最后对每个不同的类别&#xff0c;输出不一个向量&#xff0c;向量的模长表示属于该类别的概率。例如&#xff0c;在数字识别中&#xff0c;两个数字虽然重叠在一起&#xff0c;Capsule中的两个向量能完整表达两个数字的特征…

基变换与过渡矩阵

取定线性空间的一组基&#xff0c;任何一组向量可以表示为基向量的线性组合&#xff0c;且是同构映射。两个线性空间是同构。 不同的基向量&#xff0c;基向量之间的过渡矩阵 取线性空间的两组基任一向量可以表示为这两组向量的线性组合将一组基向量表示为另外基向量的线性组合…

bootstrap的滚动监听

<!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1,maximum-scale1, user-scalableno"><title>下拉菜单和滚动监…

java构造函数_JAVA的构造函数是怎么写的。万分感谢。路过的请不要嘲笑%_%

展开全部JAVA的构造函数是&#xff1a;SetLocal EnableDelayedExpansionset classpath.for %%c in (lib\*.jar) do set classpath!32313133353236313431303231363533e59b9ee7ad9431333431363030classpath!;%%cset classpath%classpath%;./classes;java com.ham.server.Server。…

在Spring中使用Redis

随着NoSQL解决方案在许多问题上越来越受欢迎&#xff0c;现代项目越来越多地考虑使用一些&#xff08;或几种&#xff09;NoSQL代替&#xff08;或并排&#xff09;传统RDBMS。 我已经在本 &#xff0c; 本和本文章中介绍了我在MongoDB上的经验。 在本文中&#xff0c;我想对Re…

C# 中winform的一些属性设置

1 窗体的大小固定住&#xff0c;不能调整其大小 窗体FormBorderStyle 属性设置为 FixedSingle; MaximizeBox 属性设置为false; MinimizeBox 属性设置为 false; 2. 在状态栏中无图标显示 设置为fase即可。 3. 设置窗体的启动位置 方法1&#xff0c; 用代码控制 this.Location …

LiveBos---按钮成下拉

转载于:https://www.cnblogs.com/luhanzhen/p/6802779.html

Solr:创建拼写检查器

在上一篇文章中&#xff0c;我谈到了Solr Spellchecker的工作原理&#xff0c;然后向您展示了其性能的一些测试结果。 现在&#xff0c;我们将看到另一种拼写检查方法。 与其他方法一样&#xff0c;此方法使用两步过程。 相当快速的“候选单词”选择&#xff0c;然后对这些单词…

linux修改机器名称

1 使用hostname命令&#xff1a;hostname 新机器名称 2 修改vi /etc/sysconfig/network # cat /etc/sysconfig/network NETWORKINGyes HOSTNAMElocalhost.localdomain 注意&#xff1a;左侧都必须大写&#xff0c;等号附件没有空格。 查看机器名称使用hostname命令 转载于:h…

java property_property在Java中的用法

展开全部在项目中经常用到各种配置文件62616964757a686964616fe78988e69d8331333337623561&#xff0c;有.properties的&#xff0c;也有.xml格式的都可以通过java.utils.Property类进行处理。1. 读取.properties文件File pFile new File("test.properties");FileIn…

Django 和 html

下面是对应的形式&#xff0c;自定义的forms 转载于:https://www.cnblogs.com/kilen/p/6804047.html

Grails动态下拉菜单

最近&#xff0c;我有一个UI要求&#xff0c;客户希望从两个单独的下拉列表中选择值。 第一个下拉列表的值实质上过滤了第二个下拉列表的值。 鉴于我们支持的财务项目对UI的要求并不严格&#xff0c;因此我不得不进行一些初步的学习和实验&#xff0c;以实现良好的实施。 这篇博…

【Java大系】Java快速教程

感谢原作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei Java是面向对象语言。这门语言其实相当年轻&#xff0c;于1995年才出现&#xff0c;由Sun公司出品。James Gosling领导了Java的项目小组。该项目的最初只想为家电设计一门容易移植的语言。然而&am…

[转]前端构建工具gulpjs的使用介绍及技巧

本文转自&#xff1a;http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具&#xff0c;与gruntjs相比&#xff0c;gulpjs无需写一大堆繁杂的配置参数&#xff0c;API也非常简单&#xff0c;学习起来很容易&#xff0c;而且gulpjs使用的是nodejs中stream来读取…

Eclipse侧边栏Outline设置字体

Eclipse的Outline&#xff0c;Project Explorer&#xff0c;Call Hierarchy等小窗口是很方便的功能&#xff0c;但是遇到函数名或文件名很长的情况&#xff0c;就只能显示前半段。尽管Eclipse的自定义程度很高&#xff0c;但是却找不到这些窗口的字体设置。 经过一番摸索后&…

AOP的简单介绍

为什么使用AOP&#xff0c;一个简单的回答这个问题的方法是显示一个横切关注点的实现而不使用AOP。 考虑一个简单的服务及其实现&#xff1a; public interface InventoryService {public Inventory create(Inventory inventory);public List<inventory> list();public I…

java实现表达式求值_如何编写一个高效的Java表达式求值程序

虽然&#xff0c;这个题目是有一点夺人眼球&#xff0c;但我真实这么做了(关是以否信任基准测试效果&#xff0c;这是其他一个话题)。所以&#xff0c;上周我一贯在找一个小型、适用的竞赛争辩数学表达式的类库。有功夫我在stackoverflow上看到了一个帖子&#xff0c;里面举荐的…

两张表的笛卡尔积用sql语句

第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小SELECT * FROM table1 CROSS JOIN table2转载于:https://www.cnblogs.com/henuyuxiang/p/6811717.html

[dpdk] 读官方文档(3)

续前节&#xff0c; 测试小程序 1. 想编译测试程序首先需要设置两个环境变量&#xff0c;为什么呢&#xff0c;因为测试程序的Makefile里用了。。。 rpm装了打包好的devel包&#xff0c;这个rpm也会自带这两个环境变量。就是说写第三方程序的时候&#xff0c;习惯上&#xff0c…

比较OpenDDR和WURFL

量身定制的Web内容通常受益于定制&#xff0c;以考虑多种因素&#xff0c;例如屏幕大小&#xff0c;标记语言支持和图像格式支持。 此类信息存储在“设备描述存储库”&#xff08;DDR&#xff09;中。 WURFL和OpenDDR项目都提供了访问DDR的API&#xff0c;以简化并促进适应其交…