java--泛型

泛型的介绍

(1) 泛型又称参数化类型,是Jdk5.0出现的新特性,解决数据类型的安全性问题

(2)在类声明或实例化时只要指定好需要的具体的类型即可。

(3)Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮

(4)泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。
下面有个具体的例子:

public class Generic01 {
    public static void main(String[] args) {
        //注意,特别强调: E 具体的数据类型在定义 Person 对象的时候指定,
        // 即在编译期间,就确定 E 是什么类型
        Person<String> person1 = new Person<>("txl");
        Person<Integer> person2 = new Person<>(120);
        person1.showClass();
        person2.showClass();
    }
}
class Person<E>{
    E s;

    public Person(E s) {
        this.s = s;
    }
    public void showClass(){
        System.out.println(s.getClass());
    }
}

(5)在给泛型指定具体的类型后,可以传入该类型或者该类型的子类型
比如String是Object的子类

		ArrayList<Object> arrayList = new ArrayList<>();
        arrayList.add("txl");

自定义泛型

自定义泛型类:
结构如下所示:
class 类名<T,R…>{
成员
}
在自定义泛型类中其中有一些使用细节:
1.普通的属性,方法可以使用泛型

2.使用泛型的数组不可以初始化,因为不知道开辟多大的空间,如果使用,编译器会报错。

3.静态方法,静态属性不可以使用泛型,因为静态方法,静态属性在类加载时就初始化了,此时还没有创建对象,类型还未确定,会出现错误。

自定义泛型接口:
interface 接口名<T,R…>{
}
在自定义接口中有一些使用细节:
1.在接口中,静态属性不能使用泛型(注意:接口中所有的属性都是静态属性)

2.自定义泛型接口在继承接口或者实现接口时确定泛型。

3.如果没有指定泛型,那么就是Object

自定义泛型方法:

class Car<E,T>{
    public void run(E e){
        
    }//使用类声明的泛型的方法,不是泛型方法
    public <R> void fly(R r){

    }//这个才是泛型方法
}

使用的一些细节:
1.泛型方法可以定义在普通类中,还可以定义在泛型类中

2.当泛型方法被调用时,传入参数的类型会确定泛型

泛型的继承与通配符

1.泛型不具有继承性

List<Object> list = new ArrayList<String>();
//这种写法是错误的

2.泛型的一些通配符

<?>:支持任意类型的泛型
<? extends A>支持A类以及A类的子类,确定了泛型的上限
<? super A>支持A类以及A类的父类,但不限于直接父类,确定了泛型的下限

JUNIT5.4

一段代码有很多功能需要测试,通常我们会将它们放在main方法中,这样比较麻烦,但是如果我们使用了JUNIT,可以直接运行一个方法,并给出信息,很方便。
JUnit是Java语言的一个单元测试框架。

import org.junit.jupiter.api.Test;
	@Test
    public void m1(){
        System.out.println("hello,world!");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jmu-java-05集合(泛型)-10-generalstack是关于Java泛型中的通用栈的学习内容。通用栈是一种可以存储任意类型数据的栈结构,通过泛型的方式实现。在学习中,我们可以了解到通用栈的实现原理、使用方法以及注意事项等内容,帮助我们更好地理解和应用Java泛型。 ### 回答2: JMU-Java-05集合(泛型)-10-GeneralStack是一个Stack(栈)的实现类,使用Java中的泛型进行定义,可以存储任何类型的数据。 在该类中,使用一个Object类型的数组进行存储元素,并通过一个整型变量top来表示当前栈顶元素的下标。在push(入栈)方法中,先将top加一,然后将元素存储在数组中,实现了入栈的功能。在pop(出栈)方法中,先判断栈是否为空,若为空则抛出栈空异常,否则将top减一,并返回数组中相应的元素,实现了出栈的功能。其他方法如isEmpty(判断栈是否为空)、isFull(判断栈是否已满)和size(获取栈中元素个数)也在该类中实现。 该类的泛型定义使得我们可以使用该类存储任何类型的数据,而不需要在定义类时指定数据类型,提高了其灵活性和可复用性。在使用时,我们只需要在创建对象时传入相应的数据类型,如:GeneralStack<Integer> stack = new GeneralStack<Integer>();即可。 该类还实现了Iterable接口,使得该类可以使用foreach循环进行遍历操作,方便了我们对栈中元素的操作。同时,该类还通过对数组的动态扩容,解决了数组固定大小的限制问题,从而提高了该栈类的通用性和易用性。 总之,JMU-Java-05集合(泛型)-10-GeneralStack是一个使用泛型实现的通用栈类,可以存储各种类型的数据,并提供了常用的栈操作方法,具有较高的可复用性与适用性。 ### 回答3: jmu-java-05集合(泛型)-10-generalstack,意为基于泛型的栈实现。 首先我们需要了解什么是泛型泛型Java SE 5引入的一个新特性,它可以让我们在编写代码时定义一些未知的类型参数,以达到代码的复用和类型安全的目的。对于集合类或者其他容器类而言,适用于任何类的容器的需求是普遍存在的,这时就可以应用泛型。 在Java泛型使用<>标识,其语法格式如下: ```java public class 类名<类型参数列表> { //成员变量、方法等 } ``` 类型参数列表是由逗号隔开的参数列表,可以理解为未知类型的占位符。这样的好处是可以在编写集合类时,避免出现类型转换等一系列问题,提高程序的可读性。 而在jmu-java-05集合(泛型)-10-generalstack中,则是基于泛型实现的数据结构——栈。栈是一种后进先出(LIFO)的数据结构,它只允许在栈顶添加或删除元素,因此操作非常简单、快速并且高效。 在该实现中,栈的元素可以是任意类型,数据元素入栈则是通过 push() 方法实现的,出栈则是通过 pop() 方法实现的。其中,push() 方法用于向栈中添加新的元素,pop() 方法用于弹出并返回栈顶的元素。同时,还提供了 isEmpty() 方法、size() 方法等基本的栈操作方法。 总之,jmu-java-05集合(泛型)-10-generalstack是一种基于泛型实现的栈,提供了复用和类型安全的目的。其实现使用简便、高效、易于扩展等优点,广泛应用在Java开发中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值