Java教程

java泛型声明

本文主要是介绍java泛型声明,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在java中,泛型的使用一般限于List和Map类,自己实现的很少。具体实现可以参考廖雪峰的文章。除此之外,还有一些问题记录一下。

方法上的<T> 是什么含义

	public static <T> T[] copyOf(T[] original, int newLength) {
        return (T[]) copyOf(original, newLength, original.getClass());
    }

上面的代码是Arrays.copyOf方法,我们知道T[]是返回值,那么<T>是个啥?

  • 其实它是泛型声明,因为这个方法我们想要支持不同的类型,就需要用到泛型。但是直接使用T的话,编译器不知道T代表什么含义,所以需要在前面使用<T>来声明T是一个泛型类型。
  • 我们知道ArrayList的泛型是标识在类后面的,所以类中的方法都可以直接使用。如果对某个方法使用单独的泛型,就需要用上面这种方法
  • 静态方法不能使用类后面的泛型,因为类后面的泛型类型是在实例化对象之后才能确定的。如果静态方法想要使用泛型,就需要用上面的方法,自行指定泛型类型,不过这个类型就和类后面的泛型类型无关了,即便是同名的,也是无关的。

泛型中的?是什么

问号是用于不需要关注泛型类型的情况,比如

    public void length(List<?> list) {
        return list.size();
    }

泛型中的super和extends

可以参考extends通配符–廖雪峰
super通配符–廖雪芳

还有java泛型的逆变、协变&不变

泛型擦除带来的问题

参考java泛型的类型擦除几个问题

总结

  1. 常见情况下,只需要使用List和Map的泛型即可
  2. 自己实现泛型,可以参考List和Map
  3. <T> 是用来声明泛型的,可以用于类名后,也可以用于方法签名处
  4. ?是用在不关注泛型类型的场景下
  5. super和extends用在泛型中,比较复杂,参考上面文章
这篇关于java泛型声明的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!