Python 官方文档:入门教程 => 点击学习
目录一、前言二、泛型三、泛型定义的格式:什么是引用类型?泛型的好处是: 四、泛型类五、泛型方法六、泛型接口七、类型通配符总结一、前言 泛型在java中有很重要的地位,在实际
泛型在java中有很重要的地位,在实际开发中用处也很大。
泛型:是jdk5中引入的特性,他提供编译是类型是类型的安全检测机制,这个机制允许在编译时检测到非法的类型,它的本质是参数化类型,也就是所操作的数据类型不变指定为一个参数
将原来具体的类型参数化,然后再使用/调用的时候传入具体的参数
泛型的类型:
①:泛型类
②:泛型方法
③:泛型接口
<类型> :指定一种类型的格式,这里的类型可以看成是形参。
<类型1,类型2...>:指定多种类型的格式,多种类型之间用逗号隔开,这里的类型类型1,类型2可以看成是形参,将来具体调用的时候的参数看成是实参,这里的泛型只能是引用类型。
除了八大基本类型其他的都是引用类型,如基本类型对应的包装类
没指定类型默认是Object类型
举个例子,当没有使用泛型时:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class 泛型Demo {
public static void main(String[] args) {
//创建一个对象
Map map=new HashMap();
//添加数据
map.put(1, "张三");
map.put(2, "李四");
map.put(3,"王五");
map.put(5, 6);//加了不一样的类型数据
//键的集合
Set keySet=map.keySet();
//键找值
for(Object key: keySet){
String value=(String)map.get(key);
System.out.println(key+":"+value);
}
}
}
报了一个类型转换异常(int会自动转化成Integer),Integer不能转为String
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
此时泛型的好处就体现出来了,将运行时会出现的错误拉到了编译期间。
当然也可以在输出是采用Object接收
//键的集合
Set keySet=map.keySet();
//键找值
for(Object key: keySet){
Object value=map.get(key);
// String value=(String)map.get(key);
System.out.println(key+":"+value);
}
这样也可以得到想要的结果。
泛型类的定义格式:
修饰符 class 类名<类型> { }
举例:
public class Generic<T>{}
这里的T可以使任意标识,常见的如T、E、K、V等形式常用于表示泛型。
泛型类下
public class Generic<T> {
//定义一个变量,提供get set方法
private T t;
public T getT(){
return t;
}
public void SetT(T t){
this.t=t;
}
}
测试类下
public class GenericDemo {
public static void main(String[] args) {
Generic<String> g1=new Generic<>();
g1.SetT("章三");
System.out.println(g1.getT());
System.out.println("------------------");
Generic<Integer> g2=new Generic<>();
g2.SetT(100);
System.out.println(g2.getT());
}
}
运行结果
定义这个泛型类的好处就是可以在测试中输入各种你想要的类型。
定义泛型方法的格式:
修饰符 <类型> 返回值类型 方法名 (类型 类型名)
举例:
public <T> void show (T t){}
泛型方法
public class Generic {
public <T> void show(T t){
System.out.println(t);
}
}
泛型方法测试下:
public class GenericDemo {
public static void main(String[] args) {
Generic g=new Generic();
g.show("张三");
g.show(100);
g.show(true);
g.show(null);
}
}
运行结果
泛型方法比泛型类方便许多,直接在这使用即可,可以用个中类型的参数
格式:修饰符 interface 接口名<类型>{}
举例:
public interface Generic<T>{}
既然是接口那就得定义一个类 去实现这个接口
泛型接口:
public interface Generic<T>{}
GenricImp类下:
public class GenricImp<T> Generic<T>{
public void show(T t){
System.out.println(t);
}
}
GenricDemo类下:
public class GenricDemo{
public static void main(String[]args){
Generic<String> g1=new GenericImp<String>();
g1.show("张三");
Generic<Integer> g2=new GenericImp<Integer>();
g2.show(100);
}
}
<? extends T>上限通配,?表示是T的一个未知子类。
<? super T>下限通配,?表示是T的一个未知父类。
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!
--结束END--
本文标题: 这个Java泛型不太正经
本文链接: https://www.lsjlt.com/news/161779.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0