亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

說一下泛型原理,并舉例說明

標簽:
Java

1.泛型的基础概念

泛型实现了参数化类型的概念,使代码可以应用于多种类型。

  • 简单泛型
public class Hold<T> {
private T a;
public Hold(T a){
    this.a = a;
}

public T getA() {
    return a;
}

public void setA(T a) {
    this.a = a;
}
}
  • 泛型接口
public interface Generator<T> {
T test();
}
  • 泛型方法
public class Hold{
     public <T> void f(T a){
     System.out.println(a.getClass().getName());
 }
}

2.泛型的擦除

考点:在泛型代码内部,无法获得任何有关泛型参数类型的信息。

  • 考题1
  class c1 = new ArrayList<String>().getClass();
  class c2 = new ArrayList<Integer>().getClass();
  System.out.println(c1 == c2);
  答案:true
  • 考题2
class Frob {}
class Fnorkle {}
class Quark<Q> {}
class Particle<POSITION,MOMENTUM> {}

public class LostInformation {
public static void main(String[] args) {
  List<Frob> list = new ArrayList<Frob>();
  Map<Frob,Fnorkle> map = new HashMap<Frob,Fnorkle>();
  Quark<Fnorkle> quark = new Quark<Fnorkle>();
  Particle<Long,Double> p = new Particle<Long,Double>();
  System.out.println(Arrays.toString(
    list.getClass().getTypeParameters()));
  System.out.println(Arrays.toString(
    map.getClass().getTypeParameters()));
  System.out.println(Arrays.toString(
    quark.getClass().getTypeParameters()));
  System.out.println(Arrays.toString(
    p.getClass().getTypeParameters()));
}
} 

/* Output:
[E]
[K, V]
[Q]
[POSITION, MOMENTUM]
*///:~

3.泛型的边界

将某个参数限制为某个类型的子集。为了执行这种限制,Java 泛型重用了extends 关键字。

interface HasColor { java.awt.Color getColor(); }

class Colored<T extends HasColor> {
 T item;
 Colored(T item) { this.item = item; }
 T getItem() { return item; }
 // The bound allows you to call a method:
 java.awt.Color color() { return item.getColor(); }
}

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消