正如泛型方法允许在方法签名中声明泛型形参一样,Java也允许在构造器签名中声明泛型形参,这样就产生了所谓的泛型构造器.

package com.j1803;
class Foo{
public <T> Foo(T t){
System.out.println(t);
}
}
public class GenericConstructor {
public static void main(String[] args) {
//泛型构造器中的T类型为String
new Foo("AAAA");
//泛型构造器中T类型为Integer
new Foo(45);

//显示指定泛型构造器中的T类型为String
//传给Foo构造器的实参也是String对象,完全正确
new <String>Foo("BBBB");

//显示指定泛型构造器中的T类型为String
//传给Foo构造器的实参确实Double对象,编译错误
//new <String>Foo(45.23);//编译错误
}
}
 new <String>Foo("BBBB");不仅显示指定了泛型构造器中泛型形参T的类型应该是String,而且程序传给该构造器的参数值也是String类型,因此程序完全正确,而在new <String>Foo(45.23);总则因为类型不同而出现编译错误.
Java7新增的"菱形"语法,它允许调用构造器时在构造器后使用一对尖括号来代表泛型信息,但如果程序显示地指定了泛型构造器中声明的泛型形参的实际类型,则不可以使用"菱形"语法.
package com.j1803.Type_wildcards;
class MyClass<E>{

public <T>MyClass(T t){
System.out.println("t的参数是:"+t);
}
}
public class GenericDiamondTest {
public static void main(String[] args) {
//MyClass类声明中的E是String类型
//泛型构造器中声明的T形参是Integer类型
MyClass<String> mc1=new MyClass<>(5);

//显示指定泛型构造器中声明的T形参是Integer类型
MyClass<String> mc2=new <Integer>MyClass<String>(6);

//MyClass类声明中的E是String类型
//如果显示指定泛型构造器中声明的T形参是Integer;
//此时就不能使用"菱形"语法,下列代码是错的.
//MyClass<String>mc3=new <Integer> MyClass<>(5);
}
}
上面的代码中即制定了泛型构造器的泛型参数是Integer类型,又想使用"菱形"语法,所以这行代码无法通过编译
 

泛型(8)-Java7的"菱形"语法与泛型构造器的更多相关文章

  1. C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#线程安全使用(五) C#语法——元组类型 好好耕耘 redis和memcached的区别

    C#语法——泛型的多种应用   本篇文章主要介绍泛型的应用. 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性.类型安全性和效率. 泛型的定义 下面定义了 ...

  2. Java17-java语法基础——泛型

    Java18-java语法基础——泛型 一.泛型概念和作用 1.泛型概念: 泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说,所操作的数据类型被指定为一个参数.这种参数类型可以用在类 ...

  3. C#语法之泛型

    前面两篇C#语法主要是回顾委托相关的.这篇主要回顾了泛型. 一.为什么要有泛型? 我们在写一些方法时可能会方法名相同,参数类型不同的方法,这种叫做重载.如果只是因为参数类型不同里面做的业务逻辑都是相同 ...

  4. C#高级语法之泛型、泛型约束,类型安全、逆变和协变(思想原理)

    一.为什么使用泛型? 泛型其实就是一个不确定的类型,可以用在类和方法上,泛型在声明期间没有明确的定义类型,编译完成之后会生成一个占位符,只有在调用者调用时,传入指定的类型,才会用确切的类型将占位符替换 ...

  5. C#基础语法之-泛型

    泛型:一共7个知识点 1.引入泛型,延迟声明 2.如何声明和使用泛型 3.泛型的好处和原理 4.泛型类,泛型方法,泛型接口,泛型委托 5.泛型约束 6.协变,逆变 7.泛型缓存 一.为啥会出现泛型,有 ...

  6. C# 语法特性 - 泛型(C#2.0)

    泛型将 类型参数 的概念引入了 .NET Framework. 泛型主要有两个优点: 1.编译时可以保证类型安全. 2.不用做类型转换,获得一定的性能提升. 泛型方法.泛型委托.泛型接口 除了泛型类之 ...

  7. Java泛型学习笔记--Java泛型和C#泛型比较学习(一)

    总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...

  8. (一)关于java泛型的学习总结(泛型方法、泛型擦除)

    目录概要 一.泛型方法 二.利用泛型方法的特性实现代码的简化 三. 关于泛型的擦除 四.无界通配符和原生类型区别 五.转型和警告   泛型 一般的类中的属性或方法的参数,只能使用具体的类型:要么是基本 ...

  9. java泛型总结(类型擦除、伪泛型、陷阱)

    JDK1.5开始实现了对泛型的支持,但是java对泛型支持的底层实现采用的是类型擦除的方式,这是一种伪泛型.这种实现方式虽然可用但有其缺陷. <Thinking in Java>的作者 B ...

随机推荐

  1. 聊聊 apt sources.list 文件格式

    前言 之前玩 ubuntu 需要切换国内源地址时,都是网上复制别人提供好的,也不知道是什么意思,拿来就用. 这次花点时间来看一下 apt sources.list 的格式,以及其表示的含义. 格式 s ...

  2. Keras神经网络集成技术

    Keras神经网络集成技术 create_keras_neuropod 将Keras模型打包为神经网络集成包.目前,上文已经支持TensorFlow后端. create_keras_neuropod( ...

  3. H265与ffmpeg改进开发

    H265与ffmpeg改进开发 1. Introduction KSC265是集编码.解码于一体的H.265编解码软件,完全遵循H.265协议标准.符合H.265编码规范的视频都可以通过KSC265进 ...

  4. AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

    AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念.但是很多同学在使用过后都提出了需要多用户支持的建议.整个团队或者整个公司都使用同一个密码来管理非常的 ...

  5. 学废了系列 - WebGIS vs WebGL图形编程

    目前工作中有不少涉及到地图的项目,我参加了几次技术评审,前端伙伴们在 WebGIS 方面的知识储备稍有不足,这次分享的主要目的是科普一些在前端领域比较常用的 WebGIS 知识.另外,我之前的工作中积 ...

  6. Mac下安装及配置Appium环境

    candiceli   Mac下安装及配置Appium环境 我是小白,自己研究appium好几周了. 一开始按照同事这篇文章设置Mac下的环境,http://www.cnblogs.com/tangd ...

  7. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  8. MySQL 数据库设计的“奥秘”

    2 MySQL 数据库设计的"奥秘" [主题]逻辑设计:数据类型与 Schema 所谓"万丈高楼平地起",一个稳固的建筑离不开扎实的基础.同样,良好的的「逻辑设 ...

  9. php 安装 yii 报错: phpunit/phpunit 4.8.32 requires ext-dom *

    php 安装 yii 报错: phpunit/phpunit 4.8.32 requires ext-dom * 我的版本是7.0,以7.0为例演示. 先装这两个拓展试试: sudo apt-get ...

  10. MySQL 到 ES 数据实时同步技术架构

    MySQL 到 ES 数据实时同步技术架构 我们已经讨论了数据去规范化的几种实现方式.MySQL 到 ES 数据同步本质上是数据去规范化多种实现方式中的一种,即通过"数据迁移同步" ...