泛型方法是在调用方法的时候指明泛型的具体类型 ,我们在开发java的时候,会遇到java泛型方法的调用,可是这对于新手java来说,有些难度,那下面我们就给大家讲解一下java泛型方法怎么调用?
在调用泛型方法的时候,可以指定泛型,也可以不指定泛型。在不指定泛型的情况下,泛型变量的类型为 该方法中的几种类型的同一个父类的最小级,直到Object。在指定泛型的时候,该方法中的几种类型必须是该泛型实例类型或者其子类。
class Test { public static void main(String[] args) { //不指定泛型的时候 int a1 = add(1, 2); //这两个参数都是Integer,所以T为Integer类型 Number b1 = add(1, 1.2); //这两个参数一个是Integer,以风格是Float,所以取同一父类的最小级,为Number Object c1 = add(1, "my"); //这两个参数一个是Integer,以风格是Float,所以取同一父类的最小级,为Object //指定泛型的时候 int a = Test.add(1, 2); //指定了Integer,所以只能为Integer类型或者其子类 // int b = Test.add(1, 2.2);//编译错误,指定了Integer,不能为Float Number c = Test.add(1, 2.2); //指定为Number,所以可以为Integer和Float } //这是一个简单的泛型方法 public staticT add(T x, T y) { return x; } }
java泛型方法如何定义?
泛型方法,是在调用方法的时候指明泛型的具体类型 。
定义格式:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
例如:
/** * * @param t 传入泛型的参数 * @param <T> 泛型的类型 * @return T 返回值为T类型 * 说明: * 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。 * 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。 * 3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。 * 4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E等形式的参数常用于表示泛型。 */ public < T > T genercMethod(T t) { System.out.println(t.getClass()); System.out.println(t); return t; }
调用方法时,确定泛型的类型
public static void main(String[] args) { GenericsClassDemo < String > genericString = new GenericsClassDemo("helloGeneric"); //这里的泛型跟下面调用的泛型方法可以不一样。 String str = genericString.genercMethod("hello"); //传入的是String类型,返回的也是String类型 Integer i = genericString.genercMethod(123); //传入的是Integer类型,返回的也是Integer类型 }
这里我们可以看下结果:
class java.lang.String hello class java.lang.Integer 123
这里可以看出,泛型方法随着我们的传入参数类型不同,他得到的类型也不同。泛型方法能使方法独立于类而产生变化。
这样就可以将java泛型定义好了,其实使用泛型的好处还是很多的,能够编译期的类型安全,还能避免类型强转的麻烦!最后大家如果想要了解更多java常见问答知识,敬请关注奇Q工具网。
推荐阅读: