首页 > 编程知识 正文

JAVA泛型class,java多线程

时间:2023-05-03 09:12:46 阅读:11257 作者:3473

java的通用,java定义通用方法

本文详细介绍java通用的使用方法和通用原理

java通用

通用型是J2 SE1.5中引入的功能,将类型抽象为参数,简化代码,实现类型的安全性

通用性的使用方法

泛型类型可用于通过方法类和接口在尖括号中添加标识符来声明

类通用类{

t; 公共关系类(TT ) )。

{this.t=t;

}publicT getT () ) )。

{返回;

}

接口通用接口{语音打印机通用接口(TT );

}公共静态测试(aa ) ) )。

{

系统. out.println (a; 返回基因;

}

其中,类型t是不确定的类型,要使用必须填写实际的类型

ps1:可以为通用参数指定任意名称

ps2:可以声明任何通用参数的不同通用参数用“、”分隔

使用泛型类时,方法与普通类没有很大不同。 但是,必须填充尖括号和类型

通用类测试(genericityclassgc=newgenericityclass );

String s=gc.getT (;

Main.test (“通用方法测试”);

由于编译器导出的存在,所以可以省略重复的类型信息

通用类测试(genericityclassgc=newgenericityclass ); //前面的声明类型后面的可以省略

String s=gc.getT (;

Main.test (“通用方法测试”); //后填写的参数String由于通用参数的类型已经决定,所以可以省略

Ava通用型的实现原理

java的通用实现机制不像c编译时模板生成和c#运行时生成通用类,而是利用了一系列通用擦除机制

通过编译的字节码,我们发现编译器将所有通用参数处理为Object类型

classGenericityClass

{

对象t; 公共关系类(对象) )。

{this.t=t;

}publicObject getT () ) ) )。

{返回;

}

}接口插件程序接口

{语音打印机通用(对象);

}公共物理对象测试(objecta ) )。

{

系统. out.println (a; 返回基因;

}

通用类测试(genericityclassgc=newgenericityclass );

strings=(string ) gc.getT ); //返回值为Object,所以强制转换

BlueBridge.test (“通用方法测试”);

如果这是通用擦除,则可以通过反射验证List的实际类型应该是List

列表列表=new ArrayList (;

list.add (这是字符串);

list.add (这也是字符串);

list.add (这还是字符串); try{

list.class.getmethod(add ),Object.class ).invoke ) list,(Object ) newint ) { 1,2,3 };

} catch (illegalaccessexception ) {

e .打印堆栈跟踪(;

}for(objectobj:list ) ) )。

{

system.out.println(obj;

}

执行结果

这是字符串

这也是字符串

还是字符串

[I@4554617c]

于是我们成功地在List中插入了int序列

为什么java使用通用型擦除机制实现通用型

为了与早期版本的代码兼容

java的常规类型是添加到J2 SE1.5中的常规容器,将对象转换为objectstorageList并进行编译时,它是list的完全兼容的早期版本

但是,这带来了必须将不是基本类型的所有基本类型转换为对应的包装类、例如List的缺陷的通用性,导致了装箱带来的效率的损失

随后的java版本似乎会引入解决基本装箱问题的机制,但这可能要等到猴年马月

结束

相关文章还没有相关文章

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。