java代码有没有泛型 java 泛型编程( 二 )


1.2. 编写泛型类要注意:
1) 在定义一个泛型类的时候,在 “<>”之间定义形式类型参数,例如:“class TestGen<K,V>”,其中“K” , “V”不代表值 , 而是表示类型 。
2) 实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写 。例如:
TestGen<String,String> t=new TestGen<String,String>();
3) 泛型中<K extends Object>,extends并不代表继承,它是类型范围限制 。
2、泛型与数据类型转换
2.1. 消除类型转换
上面的例子大家看到什么了,数据类型转换的代码不见了 。在以前我们经常要书写以下代码 , 如:
//code list 5
import Java.util.Hashtable;
class Test {
 public static void main(String[] args) {
Hashtable h = new Hashtable();
h.put("key", "value");
String s = (String)h.get("key");
System.out.println(s);
 }
}
这个我们做了类型转换,是不是感觉很烦的,并且强制类型转换会带来潜在的危险,系统可能会抛一个ClassCastException异常信息 。在JDK5.0中我们完全可以这么做 , 如:
//code list 6
import Java.util.Hashtable;
class Test {
 public static void main(String[] args) {
Hashtable<String,Integer> h = new Hashtable<String,Integer> ();
h.put("key", new Integer(123));
int s = h.get("key").intValue();
System.out.println(s);
 }
}
这里我们使用泛化版本的HashMap,这样就不用我们来编写类型转换的代码了,类型转换的过程交给编译器来处理,是不是很方便,而且很安全 。上面是String映射到String,也可以将Integer映射为String,只要写成HashTable<Integer,String> h=new HashTable<Integer,String>();h.get(new Integer(0))返回value 。果然很方便 。
java中什么叫泛型?泛型 。规定了此集合中元素的类型 。例如java代码有没有泛型:\x0d\x0a\x0d\x0aArrayList arr = new ArrayList ();\x0d\x0a\x0d\x0a这样就创建了一个包含整数的 ArrayList 对象 。\x0d\x0a如果要自己定义泛型类,就用如下形式:\x0d\x0a\x0d\x0aclass MyCollection {...}\x0d\x0a\x0d\x0a尖括号中的类型可以有限制,例如java代码有没有泛型你需要让 MyCollection 中的类型都具有可比性,可以用如下格式:\x0d\x0a\x0d\x0aclass MyCollection {...}\x0d\x0a\x0d\x0a此外,要注意泛型的一些特性:\x0d\x0a\x0d\x0a1. 不能直接创建泛型数组 。如 new ArrayList[5] 之类的是错的 。只能用如下方法:new ArrayList[5] 或者 (ArrayList[])new ArrayList[5];\x0d\x0a\x0d\x0a2. 静态方法中需要小心,因为 E 一般是非静态类型 , 如果你这样写:\x0d\x0aclass MyCollection {\x0d\x0apublic static MyCollection abc() {\x0d\x0a......\x0d\x0a}\x0d\x0a}\x0d\x0a是错的 。你只能把去掉 。
请教关于java的泛型方法Java泛型详解
概述
在引入范型之前,Java类型分为原始类型、复杂类型,其中复杂类型分为数组和类 。引入范型后 , 一个复杂类型
就可以在细分成更多的类型 。
例如原先的类型List,现在在细分成ListObject, ListString等更多的类型 。
注意,现在ListObject, ListString是两种不同的类型,
他们之间没有继承关系 , 即使String继承了Object 。下面的代码是非法的
ListString ls = new ArrayListString();
ListObject lo = ls;
这样设计的原因在于,根据lo的声明,编译器允许你向lo中添加任意对象(例如Integer),但是此对象是
ListString,破坏了数据类型的完整性 。
在引入范型之前,要在类中的方法支持多个数据类型,就需要对方法进行重载,在引入范型后,可以解决此问题
(多态),更进一步可以定义多个参数以及返回值之间的关系 。

推荐阅读