3
93.67
(4)当上面的例子的方法变为:
// 只允许Number和Number的父类的引用调用
@SuppressWarnings("rawtypes")
private static void printView(List
list) {
for (Object o : list) {
System.out.println(o);
}
}
此时需要注释掉三行:
// printView(l1);// String类型的泛型对象
// printView(l4);// Integer类型的泛型对象
// printView(l5);// Double类型的泛型对象
运行,
输出结果:
99
3.3
3>泛型的方法(也被称为Java中的多态):
在类的定义中添加一个形式类型参数列表,可以将类泛型化。方法也 可以被泛型化,不管它们所在的类是不是泛型化的。
泛型方法的格式为:
修饰符 泛型 返回类型 方法名 参数表 抛出的异常
泛型的样式有如下几种:
: 允许所以泛型的引用调用。
: 只允许泛型为Number及Number子类的引用调用。
: 只允许泛型为实现了Comparable接口的实现类的引用调用。
: 只允许泛型为即是Number及Number子类又实现了Comparable几接口的
实现类的引用调用。
注:泛型方法中
这种修饰符是不支持的。
下面是泛型方法使用的例子:
import java.util.ArrayList;
import java.util.List;
public class CollectionsTest {
public static void main(String[] args) {
//声明各类的对象
List
l1 = new ArrayList
(); List
l2 = new ArrayList(); List
l3 = new ArrayList
(); List
l4 = new ArrayList
(); List
l5 = new ArrayList
(); //创建各类的数组 String[] a1 = new String[1]; a1[0] = "a1"; Object[] a2 = new Object[1]; a2[0] = "Object"; Number[] a3 = new Number[1]; a3[0] = 3; Integer[] a4 = new Integer[1]; a4[0] = 4; Double[] a5 = new Double[1]; a5[0] = 5.5; //将相同类的数组copy到对象 copyFromArray(l1, a1); copyFromArray(l2, a2); copyFromArray(l3, a3); copyFromArray(l4, a4); copyFromArray(l5, a5); //显示对象元素 printView(l1); printView(l2); printView(l3); printView(l4); printView(l5); } //显示方法 private static void printView(List
l) { for (Object o : l) { System.out.println(o); } } //copy的方法 private static
void copyFromArray(List
l, T[] a) { for (T o : a) l.add(o); } }
输出结果: a1
Object
3
4
5.5
4>泛型类:
泛型类的写法:
class Person
{ public void show(E e) { System.out.println(e); } public E get() { return null; } }
编写泛型类的时候要注意:
静态方法中不能使用类的泛型,原因是泛型类中的泛型在创建类的对象时被替换成确定的类型。
静态方法可以通过类名直接访问,而Java是一种强类语言,没有类型的变量或对象是不允许存在的,
所以静态方法中不能使用类的泛型。
不要创建泛型类的对象,因为泛型类有可能是一个接口或抽象类,如果不是接口或抽象类则可以创建。
不能在Catch字句中使用泛型,因为编译时,如果try子句抛出的 是一检查的异常,编译器无法确定Catch能否不活这个异常。
下面是演示泛型类创建的技巧的例子:
类TestGenrics中的代码:
public class TestGenrics {
public static void main(String[] args) {
@SuppressWarnings({ "rawtypes" })
MyClass
test = new MyClass();
test.show();
MyClass
str = new MyClass
(); str.method("323"); str.show(); MyClass
i = new MyClass
(); i.method(323); i.show(); } }
泛型类MyClass
中的代码:
class MyClass
{ private T t; public void method(T t) { this.t = t; } public T method1() { return null; } public void show(){ System.out.println(t); } }
输出结果:
null
323
323
<script type="text/java script">
<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享!
回本站首页
<script>
function copyToClipBoard(){
var clipBoardContent=document.title + '\r\n' + document.location;
clipBoardContent+='\r\n';
window.clipboardData.setData("Text",clipBoardContent);
alert("恭喜您!复制成功");
}
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732">
<script type="text/java script" id="bdshell_js">
<script type="text/java script">
var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}};
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)