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){

this.obj = obj;

}

//参数化类型作为返回值的类型。

public T work(){

System.out.println("work:"+this.obj);

return this.obj;

}

//参数化类型作为参数的类型。

public void update(T obj){

this.obj = obj;

}

//参数化类型作为属性的类型。

private T  obj;

}

public static void main(String[] args) {

//语法错误。错误用法。

//Sample<int>  anotherSample = new Sample<int>(1);

//正确用法。T是Integer.

Sample<Integer> anotherSample = new Sample<Integer>(1);

//正确用法:不使用类型参数,相当于Sample<String>。

       //此时可以推导出类型参数为String。

Sample  sam = new Sample("Hello");

//错误用法,不能将String转化为Integer.

//Integer  result = sample.work();

//正确用法。String work();

String result = sample.work();

//原始类型。相当于Sample<Object>但是不同于Sample<Object>。

        //此时只能推导出类型参数为Object。

Sample  sa = new Sample();

//错误用法,不能将Object转化为String.

//String  res = sa.work();

//正确用法。Object work();

Object  res = sa.work();

}
时间: 2024-08-19 01:32:57

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

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重要技术(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[] ar

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>(); * 从而

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

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

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

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