簡體   English   中英

Java - 使用 Generics 類型

[英]Java - Using Generics Types

在這種情況下使用泛型類型的正確方法是什么? 考慮以下代碼:

public class GTree<T> {
    private int level;
    private T value;
    private String key;
    private LinkedList<GTree<T>> subTrees;
    private GTree<T> parent;

    public class NodeEntry<T extends Comparable<? super T>> implements Comparable<T>{
        private T value;
        private String key;
        
        public NodeEntry(T v, String k) {
            this.value = v;
            this.key = k;
        }
        
        public T getValue() {
            return value;
        }
        
        public String getKey() {
            return key;
        }
        
        public int compareTo(T o) {
             return getValue().compareTo(o);
         }

        public int compareTo(GTree<T>.NodeEntry<T> o) {
            // TODO Auto-generated method stub
            return value.compareTo(o.getValue());
        }
    }

    private void getAllBranches(LinkedList<LinkedList<NodeEntry<T>>> path)
    {
        if(leaf())
        {
            LinkedList<NodeEntry<T>> lastPath = path.getLast();
            NodeEntry<T> p = new NodeEntry<T>(value, key);
            lastPath.addLast(p);
            return;
        }
        else
        {
            LinkedList<NodeEntry<T>> lastPath = path.getLast();
            NodeEntry<T> p = new NodeEntry<T>(value, key);
            lastPath.addLast(p);

            ....

            for(int i = 0; i < subTrees.size(); i++)
            {
                T x = subTrees.get(i).getValue();
                if(subTrees.get(i).leaf())
                {
                    lastPath.addLast(new NodeEntry<T>(subTrees.get(i).getValue(), subTrees.get(i).getKey()));
                    ....
                }
                else
                    subTrees.get(i).getAllBranches(path);
            }
        }
    }
}

每當我使用泛型類型 T 時,編譯器都會抱怨它,除非我定義了變量 x:綁定不匹配:類型 T 不是有界參數 <T extends Comparable<? GTree 類型的 super T>>。 節點入口

問題是 NodeEntry 專門尋找一個類型為T的 class extends Comparable但 GTree class 沒有此限制。 要解決此問題,您必須從 NodeEntry 中刪除綁定要求,以從 GTree 定義類型參數 T ,其上限為T extends Comparable

如果 NodeEntry 需要與 GTree 相同的值,那么在這種特定情況下,GTree 的類型參數 T 應該綁定到 Comparable。

    public static class GTree<T extends Comparable<T>> {
        
        private int level;
        
        private T value;
        
        private String key;
        
        private LinkedList<GTree<T>> subTrees;
        
        private GTree<T> parent;

        public static class NodeEntry<T extends Comparable<T>> implements Comparable<T> {
            
            private T value;
            
            private String key;

            public NodeEntry(T v, String k) {
                this.value = v;
                this.key = k;
            }

            public T getValue() {
                return value;
            }

            public String getKey() {
                return key;
            }

            @Override
            public int compareTo(T o) {
                return value.compareTo(o);
            }
        }

        private void getAllBranches(LinkedList<LinkedList<NodeEntry<T>>> path) {
            // more
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM