Java泛型中关于泛型定义位置(类上,方法上,接口上)的小例子

更新时间:2023-07-08 14:26:21 阅读: 评论:0

Java泛型中关于泛型定义位置(类上,⽅法上,接⼝上)的⼩例⼦⼀、通配类到泛型:
对于以前我们对于⾃定义通配类型的写法可能如下:
定义学⽣类和⼯⼈类:
class Student
{
Student()
涛澜{
System.out.println("我是学⽣!");
}
}
class Worker
{
Worker()
{
System.out.println("我是⼯⼈!");
}
}
定义通⽤类:
class Tool
{
private Object obj;
public void tObj(Object obj)
{
this.obj = obj;
}
public Object getObj()
{
return obj;
}
}
主函数类:
class GenericDemo
{
public static void main(String[] args)
{
Tool t=new Tool();
t.tObj(new Worker());
//类型强转
Worker w =(Obj();
System.out.println(w);
}
}
格里昂但是如果把主函数中的new Worker()改为new Student():
t.tObj(new Student());//t.tObj(new Worker());
/
/类型强转
Worker w =(Obj();
编译仍旧不会出错,但是运⾏便会报错。存在安全问题。所以我们使⽤泛型来保证安全问题:解决办法:
定义类的时候使⽤泛型。
//泛型定义在-----类----上
class Utils<T>
{
private T t;
public void tObj(T t)
{
this.t = t;
}
public T getObj()
{
return t;
}
模板拆除}
主函数:
大学生就业
class GenericDemo
{
public static void main(String[] args)
椒盐小土豆
{
Utils<Worker> u=new Utils<Worker>();
u.tObj(new Student());//报错。必须使⽤u.tObj(new Worker());
Worker w=(Obj();
System.out.println(w);
}
}
⼆、泛型除了可以定义在类上外:
1、还可以定义在 ⽅法 上
2、还可以在泛型类⾥⾯去写⾮本类的泛型⽅法,并且保证不冲突:
3、还可以定义在接⼝上
⼀、定义在⽅法上:
/
/泛型定义在-----⽅法----上
class Demo
{
public<T>void show(T t)//这个T:Type只在该⽅法有效,和下⾯那个T没关系
{
System.out.println("show:"+t);
}
public<T>void print(T t)
{
System.out.println("print:"+t);
}
}
主函数:
class GenerDemo
{
public static void main(String[] args)
{
Demo d =new Demo();
d.show(new Integer(6));
d.show("asc");
d.print('X');
}
}
⼆、在泛型类⾥⾯去写⾮本类的泛型⽅法
class Demo<T>
{
public void show(T t)//这个T:Type只在该⽅法有效,和下⾯那个T没关系
{
System.out.println("show:"+t);
}
public<ET>void print(ET et)//ElementType:ET
{
System.out.println("print:"+et);团队活动游戏大全
}
//关于静态⽅法特例
public static void method(T t)
{
System.out.println("method:"+t);
}
}
解释:
1. 先看show()⽅法:public 修饰符的后⾯并没有泛型,所以是跟随着类上的泛型在⾛的。
2. 再看print()⽅法:public修饰符的后⾯有泛型,所以其可以接收任何类型并打印。
3. 最后看method()⽅法。这样写编译时会报:⽆法从静态上下⽂引⽤⾮静态类的意思。因为静态⽅法在定义时,参数类型必须明确。那
什么时候才能明确呢?只有在建⽴对象时才能明确。所以静态⽅法不可以访问类上定义的泛型,如果静态⽅法操作的应⽤数据不确定,可以将泛型定义在⽅法上。如下:
//关于静态⽅法特例
public<T>static void method(T t)
{
System.out.println("method:"+t);
云朵像什么的比喻句}吃团圆饭的英文
三、定义在接⼝上(简⾔之就是在类的基础上向上延伸)
interface DemoPapa<T>
{
void show(T t);
}
//实现接⼝
class Demo<T>implements DemoPapa<T> {
public void show(T t)
{
System.out.println("show:"+t);
}
public<ET>void print(ET et)
{
System.out.println("print:"+et);
}
}
主函数:
class GenericDemo
{
public static void main(String[] args)
{
Demo<String> d =new Demo<String>();
d.show("asc");
d.print('X');//Character
d.print(new Integer(5));
}
}

本文发布于:2023-07-08 14:26:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1085638.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:定义   泛型   静态
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图