黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java靜態(tài)方法泛型示例

Java靜態(tài)方法泛型示例

更新時(shí)間:2022-07-25 11:11:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1792次

就像類(lèi)型聲明一樣,方法聲明也可以是泛型的。在本文中,動(dòng)力節(jié)點(diǎn)小編將向您展示靜態(tài)泛型方法的示例。

public class Node<E> {
    E mValue;
    Node<E> mNext;
    Node<E> mPrevious; 
    public Node(E value) {
        mValue = value;
    }
        public void linkAfter(Node<E> node) {
        validate(node);
        node.mPrevious = this;
        node.mNext = mNext;
        if (mNext != null) {
            node.mNext.mPrevious = node;
        }
        mNext = node;
    } 
    public E getValue() {
        return mValue;
    }
    public Node<E> getNext() {
        return mNext;
    } 
    public Node<E> getPrevious() {
        return mPrevious;
    }               
}

在示例中,將三個(gè)數(shù)字節(jié)點(diǎn) 1->2->3 連接在一起。

我們的任務(wù)是將數(shù)字節(jié)點(diǎn)轉(zhuǎn)換為單詞節(jié)點(diǎn)。轉(zhuǎn)換后,希望節(jié)點(diǎn)看起來(lái)像一->二->三。

首先,將以非通用方式實(shí)現(xiàn)它并編寫(xiě)一個(gè)小測(cè)試以確保它有效。

現(xiàn)在,讓我們不要過(guò)多地關(guān)心實(shí)現(xiàn)。轉(zhuǎn)換節(jié)點(diǎn)的新方法稱(chēng)為convert()。它是一種靜態(tài)方法。需要注意的是,它需要一個(gè)值映射來(lái)將一個(gè)數(shù)字映射到它的單詞值。第二個(gè)參數(shù)是要轉(zhuǎn)換的數(shù)字節(jié)點(diǎn)。

Node 是一個(gè)不可變對(duì)象,因此我們必須為每個(gè)舊節(jié)點(diǎn)創(chuàng)建一個(gè)新節(jié)點(diǎn),然后按照舊節(jié)點(diǎn)的方式建立鏈接。

public static Node convert(Map valueMap, Node node) {
    Node firstNode = null;
    Map convertedNodes = new HashMap();
    while(node != null) {                
        Object o = valueMap.get(node.getValue());     
        Node newNode = (Node) createNode(convertedNodes, node.getValue(), o);
        if (firstNode == null) {
            firstNode = newNode;
        }
        setNode(newNode, NodeType.NEXT_NODE, valueMap, convertedNodes, node);
        setNode(newNode, NodeType.PREV_NODE, valueMap, convertedNodes, node);
        node = node.getNext();
    }
    return firstNode;
}

由于這些方法是非泛型的,因此有很多編譯器警告:

在調(diào)用convert()并將結(jié)果分配給 Node<String>的語(yǔ)句中存在編譯器警告。

如果convert()為我們希望將節(jié)點(diǎn)轉(zhuǎn)換為的類(lèi)型返回Node ,那就太好了。

讓我們研究convert()方法以使其通用。

什么是泛型方法?

泛型方法的聲明語(yǔ)法類(lèi)似于泛型類(lèi)型的語(yǔ)法。類(lèi)型參數(shù)部分由尖括號(hào)分隔并出現(xiàn)在方法的返回類(lèi)型之前。如果有多個(gè)類(lèi)型參數(shù),則以逗號(hào)分隔。

這是通用convert()方法的示例。

    public static <K, V> Node<V> convert(Map<K, V> valueMap, Node<K> node) {
    Node<V> firstNode = null;
    Map<K, Node<V>> convertedNodes = new HashMap<K, Node<V>>();
    while(node != null) {                
        V o = valueMap.get(node.getValue());     
        Node<V> newNode = createNode(convertedNodes, node.getValue(), o);
        if (firstNode == null) {
            firstNode = newNode;
        }
        setNode(newNode, NodeType.NEXT_NODE, valueMap, convertedNodes, node);
        setNode(newNode, NodeType.PREV_NODE, valueMap, convertedNodes, node);
        node = node.getNext();
    }
    return firstNode;
}

該方法有兩個(gè)類(lèi)型參數(shù)名稱(chēng)K和V。K是第一種類(lèi)型節(jié)點(diǎn)的占位符,V是第一種類(lèi)型將轉(zhuǎn)換為的下一種類(lèi)型的占位符。

我們?nèi)绾握{(diào)用泛型方法?

測(cè)試用例:

在我的測(cè)試用例中,我有三個(gè)相互連接的整數(shù)節(jié)點(diǎn)。接下來(lái),創(chuàng)建一個(gè)將整數(shù)映射到單詞的值映射。

然后調(diào)用convert(valueMap, one)傳遞 valueMap 和想要轉(zhuǎn)換的數(shù)字節(jié)點(diǎn)。

public void testNodeConvert() {
    Node<Integer> one = new Node<Integer>(1);
    Node<Integer> two = new Node<Integer>(2);
    Node<Integer> three = new Node<Integer>(3);
    one.linkAfter(two);
    two.linkAfter(three);     
    NodeUtils.printNode(one);     
    Map<Integer, String> valueMap = new HashMap<Integer, String>();
    valueMap.put(1, "one");
    valueMap.put(2, "two");
    valueMap.put(3, "three");        
    Node<String> nodeOne = NodeUtils.convert(valueMap, one);            
    System.out.println("Converted to: ");
    NodeUtils.printNode(nodeOne);       
}

在我們的示例中,編譯器將使用類(lèi)型參數(shù)Integer和String自動(dòng)調(diào)用convert()方法的實(shí)例化。 形式類(lèi)型參數(shù)K替換為Integer,V替換為String類(lèi)型。編譯器自動(dòng)推斷在編譯時(shí),返回類(lèi)型Node<V>必須替換為Node<String>。

一旦方法是 gerenric,編譯器警告就會(huì)消失,因?yàn)榫幾g器推斷convert()將在編譯時(shí)返回Node<String>。

另一種查看方法是打印節(jié)點(diǎn)方法。

    public static void printNode(Node<?> node) {
        while(node != null) {
            System.out.print(node.getValue());
            if (node.getNext() !=null) {
                System.out.print("->");
            }
            node = node.getNext();
        }
    }
}

請(qǐng)注意,我們使用通配符類(lèi)型 <?>。問(wèn)題是為什么我們不使用像 <E>這樣的形參類(lèi)型:

public static  void printNode(Node node) {
...
}

我們可以使用形式參數(shù)并且是完全合法的。但是,類(lèi)型參數(shù)E只使用一次。返回類(lèi)型是 void 并且不依賴于類(lèi)型參數(shù)或方法中的任何其他參數(shù)。在這種情況下,我們只有一個(gè)論點(diǎn)。此處類(lèi)型參數(shù)的目的是允許在調(diào)用printNode() 時(shí)使用各種實(shí)際參數(shù)值。如果是這種情況,應(yīng)該使用通配符,這意味著它可以采用任何類(lèi)型。

運(yùn)行時(shí)測(cè)試用例的輸出:

1->2->3Converted to: 
one->two->three

以上就是關(guān)于“Java靜態(tài)方法泛型示例”的介紹,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java基礎(chǔ)教程,里面有更豐富的知識(shí)等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 99在线观看视频免费精品9 | 欧美成人高清在线视频大全 | 在线播放 你懂的 | 日韩欧美亚洲国产 | 成人三级图片 | 久久第一页 | 欧美激情一区二区三区在线播放 | 在线观看91精品国产入口 | aa级黄色片 | 国产成人亚洲精品91专区高清 | 破外女出血一级毛片 | 成人中文字幕在线高清 | 一级黄色免费网站 | 成人99国产精品 | 免费h网站在线观看 | 手机日韩看片 | 中国毛片免费看 | 国产手机免费视频 | 福利网导航 | 性欧美.video.free | 男人香蕉好大好爽视频 | 草草视频免费观看 | 五月丁香六月综合缴清无码 | 欧美精选欧美极品 | 国产丝袜护土调教在线视频 | 高h喷水荡肉爽文各种场合 高h喷水荡肉爽文np欲 | 久久精品视频一区 | 性另类交性类交 | 国产精品视频一 | 亚洲欧美日韩成人网 | 天天摸夜夜添夜夜添国产 | 国产一区玩具在线观看 | 99资源在线观看 | 14一15sexvideo日本| 欧美在线看片 | 中文字幕小明 | 国产黄色的视频 | a毛片免费观看完整 | 日韩a一级欧美一级在线播放 | 国产日产亚洲欧美综合另类 | 欧美精品午夜 |