自定义泛型方法
基本语法
修饰符 <T,R...> 返回类型 方法名(参数列表) { }
注意细节
- 泛型方法,可以定义在普通类中,也可以定义在泛型类中。
- 当泛型方法被调用时,类型会确定。
- public void eat(E e) { },修饰符后没有<T,R..> eat方法不是泛型方法,而是使用了泛型。
应用案例
public class Exercise07 {public static void main(String[] args) {Car car = new Car();car.fly("jack",20);//当调用方法,传入参数,编译器就会确定类型,T是String类,R是Integer类car.fly(100,100.1);//当调用方法,传入参数,编译器就会确定类型,T是Integer类,R是Double类//测试fish<String, Integer> fish1 = new fish<>();fish1.hello(20,11.2);}
}//泛型方法,可以定义在普通类中,也可以定义在泛型中
class Car{public void run() { //普通方法}// <T,R>就是泛型,提供给fly使用public <T,R> void fly(T t,R r) { //泛型方法}
}
class fish<T,R>{public void run() { //普通方法}public <U,M> void fly(U u,M m) { //泛型方法}//说明// 1.下面hi方法不是泛型方法// 2.是hi方法使用了类声明的泛型public void hi(T t) {}//泛型方法,可以使用类声明的泛型,也可以使用自己声明泛型public<K> void hello(R r,K k) {System.out.println(r.getClass()); //输出运行类型为:IntegerSystem.out.println(k.getClass()); //输出运行类型为:Double}}
泛型方法练习
public class Exercise08 {public static void main(String[] args) {//下面代码输出什么?Apple<String, Integer, Double> apple= new Apple<>();apple.fly(10); //10会被自动装箱Integer10,输出Integerapple.fly(new Dog()); //Dog}
}
class Apple<T,R,M>{public<E> void fly(E e){ // 泛型方法System.out.println(e.getClass().getSimpleName());}//public void eat(U u){} 错误,因为 U没有声明public void run(M m){}
}
class Dog {}
输出:
Integer
Dog