java接口泛型方法怎么调用?泛型方法如何定义?

在java语言中,泛型是一个比较常用的功能,开发人员写的很多java类或者方法可能都会用到泛型,那java接口泛型方法怎么调用?下面来我们就来给大家讲解一下。

1.显式指定方法的类型参数,类型参数要写在尖括号中并放在方法名之前。例如:object.func(...),这样就显式指定了泛型方法的类型参数为String,那么所有出现类型参数T的地方都将替换成String类型。

2.隐式地自动推断,不指明泛型参数,编译器根据传入的实参类型自动推断类型参数。例如:void func(T t){ ... }隐式调用object.func("name"),根据"name"的类型String推断出类型参数T的类型是String

3.避免歧义,例如:void func(T t1, T t2){ ... }如果这样调用的话object.func("name", 15); 虽然编译不会报错,但是仍然会有很大隐患,T到底应该是String还是Integer存在歧义;

4.有些歧义Java是会直接当成编译错误的,即所有和泛型参数有关的歧义,例如:void func(Listl1, Listl2){...}如果这样调用的话,object.func(new List(), new List()); 这里会有歧义,编译器无法知道T到底应该是String还是Integer,这种歧义会直接报错的,编译无法通过。即泛型方法中,如果类型参数刚好就是泛型参数的类型实参,那么这个类型实参不得有歧义,否则直接编译报错。

泛型方法如何定义?

1.如果你定义了一个泛型(类、接口),那么Java规定,你不能在所有的静态方法、静态初块等所有静态内容中使用泛型的类型参数。例如:

public class A
{
    public static void func(T t)
    {
        //报错,编译不通过
    }
}

2.如何在静态内容(静态方法)中使用泛型,更一般的问题是,如果类(或者接口)没有定义成泛型,但是就想在其中某几个方法中运用泛型(比如接受一个泛型的参数等),该如何解决?

定义泛型方法就像定义泛型类或接口一样,在定义类名(或者接口名)的时候需要指定我的作用域中谁是泛型参数。例如:public class A{ ... }表明在类A的作用域中,T是泛型类型参数。

定义泛型方法,其格式是:修饰符 返回类型 方法名(形参列表) { 方法体 }。例如:public staticint func(Listlist, Mapmap) { ... },其中T和S是泛型类型参数。

泛型方法的定义和普通方法定义不同的地方在于需要在修饰符和返回类型之间加一个泛型类型参数的声明,表明在这个方法作用域中谁才是泛型类型参数;

不管是普通的类/接口的泛型定义,还是方法的泛型定义都逃不出两大要素:

1.明哪些是泛型类型参数;

2.这些类型参数在哪里使用。

泛型方法是可以接收不同类型的参数,当然泛型也是可以限制你要使用的参数类型哦,最后大家如果想要了解更多java常见问题知识,敬请关注奇Q工具网。

推荐阅读:

数据库优化面试题有哪些?数据库优化面试题及答案

java入门基础课程有哪些?java入门基础课程分享

java怎样关闭当前窗口?java如何退出?