import java.util.*;
/**
泛型如何使用?
简单来说泛型就是用来指定集合中储存元素的类型
语法规则(以ArrayList为例):
List<String> list = new ArrayList<String>();
用尖括号<> 括起来的部分表示指定集合储存的元素类型
<String>表示集合中只能储存String类型的数据
*/
public class GenericTest{
public static void main(String[] args){
//list中只能储存String类型的数据
List<String> list = new ArrayList<String>();
list.add("java");//成功添加
//list.add(100);// 错误: 不兼容的类型: int无法转换为String
/*
自动类型推断:
以上面List为例:
*/
//ArrayList后面尖括号不需要写类型也能自动默认为前面List尖括号里的String。
List<String> list2 = new ArrayList<>();
list2.add("JDK5.0");//成功添加
//list2.add(5.0);//错误: 不兼容的类型: double无法转换为String
//=================分隔符,以下为代码为自定义泛型的测试=============
MyList<Integer> myList = new MyList<>();
//因为创建对象的时候尖括号里写了Integer,因此printE()函数中只能传入Integer类型的数据
myList.printE(100);//100
//myList.printE("100");// 错误: 不兼容的类型: String无法转换为Integer
//=================
}
}
/**
那么可以自定义泛型吗?可以的
*/
class MyList<E>{
//这个E可以自己随便定义,原则上可以写成任何标识符
public void printE(E e){
//这里的E类型要和类名后面的E一致
System.out.println(e);
}
/**
要是两个类都支持泛型,那么如何在一个类中返回另一个类的泛型类型?
在这个函数中如何返回一个T类型的element数据呢?
可以先获取一个Node<E>的对象,这样T类型就用E类型代替了。
*/
public E getElement(int index){
//这样就获取了一个Node<E>对象
Node<E> node = nextFind()
//从而使T类型的element变成E类型
return node.element
}
private Node<E> nextFind(){
//伪代码,为了说明情况
}
}
//另一个支持泛型的类
class Node<T>{
Node pre;
Node next;
T element;
}
java中泛型如何理解
最新推荐文章于 2023-10-08 16:30:06 发布
本文介绍了Java中的泛型使用,包括如何指定集合元素类型、自动类型推断以及自定义泛型类。通过示例展示了泛型在ArrayList中的应用,并解释了泛型类中方法的类型参数。此外,还讨论了如何在自定义类中实现泛型,以及泛型在不同类之间的交互。
摘要由CSDN通过智能技术生成