1. 泛型方法 的定义
    <T> void method() or <T> List<T> method()
    <T> 表示声明泛型方法,是语法的一部分,“List<T>”或"void"表示方法的返回类型。
    如果在泛型类中定义泛型方法则不需要刻意声明该方法为泛型方法,即需要将第一个<T>去掉。例:
  

public interface IClass {    
    public <T> T view(T str);    
}


IClass接口中只有一个view()方法,实现查看的功能。先定义一个ClassTwo实现IClass接口中的泛型方法view()。

public class ClassTwo implements IClass{        
        
    public <T> T view(T str) {    
        System.out.println(str);    
        return str;    
    }    
}

2. 泛型类的定义
   public class className<T extends InterOrClass, U>
   定义了一个泛型类,该类包含了两个参数T和U,其中T是继承/实现了类/接口 InterOrClass, 如果实现了多个接口则用&连接。例:

public class ClassOne <T extends IClass,U>{    
    private T a;    
    private U b;    
        
    public T getA() {    
        return a;    
    }    
   
    public void setA(T a) {    
        this.a = a;    
    }    
   
    public U getB() {    
        return b;    
    }    
   
    public void setB(U b) {    
        this.b = b;    
    }    
}   public static void getList(){    
    List<String> list = new ArrayList<String>();    
    list.add(new String("1111"));    
    String str = list.get(0);    
    System.out.println(str);    
}



通过<>内指定的类型参数,我们就可以很直观的知道List的类型,不需要强制的进行转换,避免了异常,编绎器也直接利用这个类型参数信息,能直接按类型参数处理,而且不是按Obejct来处理,相对更安全,同时编绎器会检查输入的类型是不是<>是指定的参数类型,如是要不是刚编绎无法通过,这当然要比在运行时异常要好啦。

泛型类的定义
要定义一个泛型类,其实也不是很难,下面我们定义一个有两个变量的泛型类。 [code]
java 代码

public class ClassOne <T extends IClass,U>{    
    private T a;    
    private U b;    
        
    public T getA() {    
        return a;    
    }    
   
    public void setA(T a) {    
        this.a = a;    
    }    
   
    public U getB() {    
        return b;    
    }    
   
    public void setB(U b) {    
        this.b = b;    
    }    
}

这里的ClassOne类,定义了两个变量类型参数,分别为T、U,按照Java文档中的说法,使用泛型定义命名时,E为集合的元素类型,K和V表示关键字和值的类型,T表示任意类型。其中可以看到T 继承了IClass接口,在泛型的定义中如果类继承父类或实现接口都用关键字"extends"来表示,如果是多个父类或接口可以用“&”连接,这说明T这个类型参数的类型必然继承IClass或实现IClass接口. 当然,也可以将extends理解为对参数类型范围的一个限制,T extends Iclass可以理解为T的类型必须是<=Iclass,其实与将它理解为继承或者实现是一个意思。 除此之外,对参数T还可以有下限限制即写作:<? super T>,完整的写法是T extends Iclass<?super T>.

最后,我们来看一个将以上两个类实例化的例子:
再看具体的ClassOne的实例调用 ,下面实例化ClassOne的类

public static void main(String[] args) {    
        ClassTwo t = new ClassTwo();    
        ClassOne<ClassTwo,Integer> c = new ClassOne<ClassTwo,Integer>();    
        c.setA(t);    
        c.setB(new Integer(0));    
        c.getA().<String>view(new String(""));    
    }


以上说明了定义泛型类和泛型方法,有点像C++的模板,但是又不相同,当然我上面只是简单的介绍一些特性,更多信息需要参考JDK的文档。