泛型类接口方法学习

这篇具有很好参考价值的文章主要介绍了泛型类接口方法学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、泛型

1 概念

泛型(Generics),广泛的类型。最大用途是给集合容器添加标签,让开发人员知道容器里面放到是什么类型,并且自动对放入集合的元素进行类型检查。

类比实参和形参,我们在对方法中的变量操作时,并没有指明变量的实际大小,而是使用变量名来指代。泛型就是这个情况下诞生的,通过符号来指代类型,等方法调用传入实参时才会明确具体类型。

//当使用这个类时,再指明T的类型
class MyClass<T>{
	T obj;

	public T getObj(){
		return obj;
	}
	
	public void setObj(T obj){
		this.obj = obj;
	}
}

public class Demo{
	public static void main(){
		//指明类型是String
		MyClass<String> stringClass = new MyClass<>();
		//指明类型是Double
		MyClass<Double> stringClass = new MyClass<>();
		//指明类型是Integer
		MyClass<Integer> stringClass = new MyClass<>();
	}
}

总的来说,泛型就是一个参数,是类型的参数。泛型的作用:把运行时可能存在的强制类型转换风险提前到编译期解决,并简化了代码。

2 声明位置和使用位置

  • 泛型类
    • 声明位置:类名 <T>
    • 可以使用的位置:
      • 成员变量类型
      • 非静态成员方法的返回值类型
      • 非静态成员方法的参数类型
  • 泛型接口
    • 声明位置:接口名 <T>
    • 两种使用情况:
      • class ClassA implements 接口名<类型名称>, 实现类不再是泛型类
      • class ClassB<T> implements 接口名<T>, 实现类还是泛型类
  • 泛型方法
    • 声明位置:public static <T> 返回值类型 方法名(T t)
    • 使用位置:只能在方法域内部使用
    • 示例:public static <T> T show(T t) : 传入什么类型,就返回什么类型

3 使用的注意事项

  • 静态域内部不能使用泛型
  • 使用泛型类时,必须明确泛型类型
  • 使用泛型对象时,可以省略右边的泛型类型,但是不能少了<>
  • 如果使用泛型类时没有指明类型,默认是Object类型

4 通配符

  • <?> 表示任意的泛型类型
    跟原先的T有些区别,原先的T的类型对应的是调用时传入的类型。方法泛型需要再返回值前面定义。即public static <T> 返回值类型 方法名(T t),所以T类似于一个中转站。
  • <? extends A> 设定类需要继承父类A,即上限
  • <? super B> 设定类需要是子类B的父类,即下限

应用场景:

  • 设置下限:最小也肯定是动物。最大可能是Object。通常用于添加数组,不适合获取数据
void test1(List<? super Animal> list){
	//适合添加数据
	list.add(new Animal());
	list.add(new Cat())
	//不适合获取,得到数据后也要强制类型转换
	Object o = list.get(0);
}
  • 设置上限:获取到的肯定是动物的子类,最大也是动物类
void test1(List<? extends Animal> list){
	//适合获取数据
	Animal a = list.get(0);
	//不能添加数据
	list.add(new );//无法确定添加什么类型的数据
}
  • <?>不适合获取,也不能添加,通常用于翻转,复制等操作。

5 通配符<?>和泛型参数T的区别

通配符<?>和泛型参数T的区别在于使用的场景和限制。 通配符<?>是一种不确定的类型,可以用来表示任意类型。它可以在方法的参数和返回值类型中使用,用来增加灵活性,使方法可以接受不同类型的参数。
泛型参数T是一种确定的类型,可以在类、方法、接口等定义中使用,用来指定某种具体的类型。它可以使代码更加安全和类型正确,并提供编译时的类型检查。

具体区别如下:

  1. 使用范围:通配符<?>可以在方法的参数和返回值类型中使用,可以接受不同类型的参数。而泛型参数T可以在类、方法、接口等定义中使用,用来指定某种具体的类型。
  2. 灵活性:通配符<?>可以接受任意类型的参数,因此在方法的定义中可以处理多种不同类型的参数。而泛型参数T是一种确定的类型,只能处理指定的类型。
  3. 类型推断:通配符<?>在方法调用时无法推断具体的类型,需要手动指定或进行类型转换。而泛型参数T在方法调用时可以根据实际参数类型自动推断具体的类型,不需要手动指定。
  4. 限制:通配符<?>无法获取具体的类型信息,只能进行简单的操作。而泛型参数T可以通过反射等方式获取具体的类型信息,进行更复杂的操作。

总之,通配符<?>和泛型参数T在使用场景、灵活性和类型推断等方面有所不同。选择使用哪种方式取决于具体的需求和代码逻辑。文章来源地址https://www.toymoban.com/news/detail-656159.html

到了这里,关于泛型类接口方法学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 泛型类和泛型类是并列的关系

    2024年02月05日
    浏览(179)
  • 泛型类传多个参数

    2024年02月05日
    浏览(159)
  • 01 java 学习 数据类型、基础语法、封装、继承、多态、接口、泛型、异常等

    目录 环境搭建和基础知识  什么是JRE: 什么是JDK: 基础数据类型  分支选择if else switch和c一毛一样 for和while循环还有数组基本和c一样 封装 函数调用、传参、命名规范、数组新命名规范 java输入Scanner scanner = new Scanner(System.in); 类的创建和使用以及封装修饰符  构造方法:含义、

    2024年02月11日
    浏览(34)
  • Armadillo:矩阵类、向量类、Cube类和泛型类

    密集矩阵的类,其元素按列优先顺序存储(即逐列) 根矩阵类是 Mattype ,其中 type 是以下项之一: float 、 double 、 std::complexfloat 、 std::complexdoubleshort 、 int 、 long 和无符号的 short 、 int 、 long 为方便起见,定义了以下 typedef: 在本文档中,为了方便起见,使用了垫子类型;

    2024年04月15日
    浏览(31)
  • TypeScript 学习笔记 环境安装-类型注解-语法细节-类-接口-泛型

    JavaScript的变量类型相当于是动态类型,可以跟随着赋值的改变而类型改变,函数的参数也没有设定类型,所以在定位错误以及安全性上不太够。 说明 1.TS不能被JS解析器直接执行,需要编译成JS执行 2.即使TS编译出错也可以编译成JS 1.TypeScript是什么? TypeScript 是类型安全的Ja

    2024年02月16日
    浏览(58)
  • C#学习,委托,事件,泛型,匿名方法

    目录 委托 声明委托 实例化委托 委托的多播 委托的用途 事件 通过事件使用委托 声明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 编写匿名方法的语法 类似于指针,委托是存有对某个方法的引用的一种引用类型变量,引用可以在运行时被改变。特别用于实现事件和

    2024年02月12日
    浏览(34)
  • java学习——ArrayList和泛型(学习记录)

    学习资料来自菜鸟教程 ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList 继承了 AbstractList ,并实现了 List 接口。 ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下: E: 泛型数据类型,

    2024年02月06日
    浏览(53)
  • 【JavaSE】Java进阶知识一(泛型详解,包括泛型方法,协变,逆变,擦除机制)

    目录 泛型 1. 什么是泛型 2.泛型方法 3.通配符上界(泛型的协变) 4.通配符下界(泛型的逆变) 5.泛型的编译(擦除机制)         泛型:就是让一个类能适用于多个类型,就是在封装数据结构时能让封装的类型被各种类型使用所以引入了泛型的概念,虽然有了泛型,什么数

    2024年02月04日
    浏览(36)
  • java 泛型作为方法的返回值的封装

    业务需要,经常需要http方式调用某服务,然后某服务返回特定类型的返回内容。 类似 String resStr = xxxHttpClient.post() ,然后它返回一个字符串,你还需要反序列化成某种格式的。 返回值可以反序列化成的形式如下: 注意,这里的这个T是个活的,它可能根据接口的内容不同而不

    2024年02月10日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包