Java学习笔记_26_泛型概述(二)

2014-11-23 19:28:33 · 作者: · 浏览: 38
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)