Java重要技术(21)泛型之参数化类型的特点(续)

1.1. 参数化类型的特点2

类型参数不同但是存在继承关系的两个参数化类型,仍然不能混用。类型参数的继承关系不能推导出参数化类型具有继承关系。

public class GenericParameterTest2 {

static class Base {}

static class Derived  extends Base {}

static class Generic<T>{}

/**

 * @param args

 */

public static void main(String[] args) {

//正确用法,T都是Base

Generic<Base>  base = new Generic<Base>();

//正确用法,T都是Derived

Generic<Derived> derived = new Generic<Derived>();

//错误用法。两者的T不相同。

//Generic<Base>  base2 = new Generic<Derived>();

//错误用法。两者的T不相同。

//Generic<Derived> derived2 = new Generic<Base>();

//正确用法。原始类型,可以使用任何类型参数的参数化类型来赋值。

Generic  base4 = new Generic<Base>();

//正确用法。原始类型可以给任何类型参数的参数化类型来赋值。

Generic<Base>  base5 = new Generic();

}
时间: 2024-12-28 12:42:16

Java重要技术(21)泛型之参数化类型的特点(续)的相关文章

Java重要技术(22)泛型之参数化类型的本质

1.1. 参数化类型的本质 Java参数化类型相对于C++的参数化类型而言,有本质区别.前者只是编译器的类型检查的一种手段,而后者则是真正的不利于原始类型的新的类型. public class GenericParameterTest3 { static class Hello{} static class World{} static class Generic<T>{} public static void main(String[] args) { //三者编译后的类型完全相同. Gen

Java重要技术(20)泛型之参数化类型的特点

1.1. 参数化类型的特点 参数化类型有以下特点: (1)参数化类型和没有类型参数的原始类型在编译后没有本质区别. (2)类型参数不同的两个参数化类型,不能混用. public class GenericParameterTest { //参数化类型T,可以为String,Integer等引用类型. static class Sample<T> { //不带参数的构造函数. public Sample(){ this.obj = null; } public Sample(T obj){ th

Java重要技术(24)泛型之使用反射访问参数化类型

1.1. 用反射访问参数化类型 使用反射机制可以获取到一部分参数化类型有关的信息. public class GenericParameterTest5 { static class Base{} static class Generic<T extends Base>{ public T work( List<T> list){ return list.get(0); } public T work( T obj){ return obj; } } public static v

Java重要技术(19)泛型之泛型的使用方法

1.1. 泛型的用法 参数化类型比如Sample<T>中的类型参数T可以用于构造函数的参数的类型,方法的返回值的类型,画着方法的参数的类型,属性字段的类型等. public class GenericParameterTest { //参数化类型T,可以为String,Integer等引用类型. static class Sample<T> { public Sample(T obj){ this.obj = obj; } //参数化类型作为返回值的类型. public T wor

Java重要技术(23)泛型之问号通配符

1.1. 问号通配符 在类型参数中使用问号通配符,可以有三种不同的用法: (1)Generic<?> 表示类型参数为任意对象类型. (2)Generic<? extends B>表示类型参数为B或者B的派生类. (3)Generic<? super B>表示类型参数为B或者B的父类. static class A {} static class B extends A{} static class C extends B{} static class Generic&l

Java基础笔记:泛型

内容:Java中的泛型 优秀文章:新浪博客-海洋星球:http://blog.sina.com.cn/s/blog_44c1e6da0100cus3.html书籍:细说Java.疯狂Java讲义 说明:泛型是于Java SE1.5添加的新特性:泛型的本质是参数化类型,简单来说就是将泛型看作一个或多个参数,使用这个参数的代码片段可以由任何具体类类型的参数来替换:泛型的参数类型只能是类类型,不能是简单类型(简单类型是指不能再简化的编程语言内置数据类型,java中有实数-float-double.整数

恶补java(十)---泛型与集合的再学习

其余的就不多说了,一切都在代码中 package com.gc.generic; /** * JDK5 之前集合对象使用问题: * 1.向集合添加任何类型对象 * 2.从集合取出对象时,数据类型丢失,使用与类型相关方法,强制类型转换 * 存在安全隐患 * * ***************************** * * JDK5中的泛型:允许程序员使用泛型技术限制集合的处理类型 * List<String> list=new ArrayList<String>(); * 从而

Java多线程技术学习笔记(二)

目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和wait的区别 停止线程的方式 守护线程 线程的其他知识点 一.线程间的通信示例 返目录回 多个线程在处理同一资源,任务却不同. 假设有一堆货物,有一辆车把这批货物往仓库里面运,另外一辆车把前一辆车运进仓库的货物往外面运.这里货物就是同一资源,但是两辆车的任务却不同,一个是往里运,一个是往外运. 下面

转载:10个实用的但偏执的Java编程技术

在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用“防御性编程”,即一些偏执习惯的原因.下面是我个人认为的10个最有用但偏执的Java编程技术.一起来看一看吧: 将String字符串放在最前面 为了防止偶发性的NullPointerException 异常,我们通常将String放置在equals()函数的左边来实现字符串比较,如下代码: // Bad if (va