正如泛型方法允许在方法签名中声明泛型形参一样,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. Camera HDR Algorithms

    Camera HDR Algorithms HDRI是High-Dynamic Range(HDR)image的缩写,也就是高动态范围图像.它就是为了解决更好的存储高动态范围图像这个问题而发明出来的. ...

  2. A100 Tensor核心可加速HPC

    A100 Tensor核心可加速HPC HPC应用程序的性能需求正在迅速增长.众多科学研究领域的许多应用程序都依赖于双精度(FP64)计算. 为了满足HPC计算快速增长的计算需求,A100 GPU支持 ...

  3. MapReduce——客户端提交任务源码分析

    计算向数据移动 MR程序并不会在客户端执行任何的计算操作,它是为计算工作做好准备,例如计算出切片信息,直接影响到Map任务的并行度. 在Driver中提交任务时,会写到这样的语句: boolean r ...

  4. selenium-python元素定位技巧(一)

    在python-selenium元素定位中,有很多小技巧,在此记录总结 技巧一.尽量不要用可见的文本去定位 尽量不要用可见的文本去定位(特别是支持国际化的软件-比如禅道),因为一旦切换语言后,使用该方 ...

  5. python 数据写入json文件时中文显示Unicode编码问题

    一.问题描述 import json dir = { '春晓':'asfffa', '春眠不觉晓' : '处处闻啼鸟', '夜来风雨声' : 56789, 'asdga':'asdasda' } fp ...

  6. 重新整理 mysql 基础篇————— mysql 事务[三]

    前言 简单整理一下事务. 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元. 2.一致性(consistency) 数据库总是从一个一致性的状态转换到 ...

  7. Java线程池底层源码分享和相关面试题(持续更新)

    线程池各个参数讲解 public ThreadPoolExecutor(int corePoolSize, //线程池核心工作线程数量,比如newFixedThreadPool中可以自定义的线程数量就 ...

  8. 【九】Kubernetes 之 Service 概念图文讲解及功能演示

    Service 概念 Kubernetes Service 定义了这样一种抽象:逻辑上的一组 Pod,一种可以访问它们的策略 -- 通常称为微服务. Service 通常是通过 Label Selec ...

  9. 四、缓存DNS

    作用:缓存解析结果,提高解析速度 搭建方式: 1.全局转发,所有的DNS解析请求全部转发给公网DNS 2.根域迭代,所有的DNS解析请求全部发给根域DNS服务器 真机上实现缓存DNS服务器 1.搭建Y ...

  10. 题解 P6622 [省选联考 2020 A/B 卷] 信号传递

    洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...