泛型(Generic)
使用泛型可以针对不同的类有相同的处理办法
Vector<String>v=new Vector<String>();
这个尖括号就相当于泛型 如果是String 就尖括号一个String 如果是 Char 或者是自己的类 就再尖括号里加一个相应的名字
v.addElement("one");
String s=v.elementAt(0);
使用泛型的好处
类型更安全
使用更广泛,针对不同的类有相同的处理办法,但这些类之间不一定有继承关系
下面有两个例子 自定义泛型类 自定义泛型方法
import java.util.*;
class GenerivTreeClass{
public static void main(String[] args) {
TNode<String> t=new TNode<>("Roo");
t.add("Left");t.add("Middle");t.add("Right");
t.getChild(0).add("aaa");
t.getChild(0).add("bbb");
t.traverse();
}
}
class TNode<T>//定义了T这样一个类型
{
private T value;
private ArrayList<TNode<T>> children=new ArrayList<>();
TNode(T v){this.value=v;}
public T getValue() {return this.value;}
public void add(T v) {
TNode<T> child=new TNode<>(v);
this.children.add(child);
}
public TNode<T> getChild(int i){
if((i<0)||(i>this.children.size())) return null;
return (TNode<T>)this.children.get(i);
}
public void traverse() {
System.out.println(this.value);
for(TNode child:this.children)
child.traverse();
}
}
import java.util.*;
class GenericMethod{
public static void main(String[] args) {
Date date=BeanUtil.<Date>getInstance("java.util.Date");
System.out.println(date);
}
}
class BeanUtil{
public static <T> T getInstance(String clzName){//尖括号里是反馈时候的类型
try {
Class c=Class.forName(clzName);
return(T)c.newInstance();
}
catch(ClassNotFoundException ex) {}
catch(InstantiationException ex) {}
catch(IllegalAccessException ex) {}
return null;
}
}