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版本似乎会引入解决基本装箱问题的机制,但这可能要等到猴年马月
结束
相关文章还没有相关文章