簡體   English   中英

泛型類使用泛型參數

[英]Generic class uses generic argument

情況

我正在制作一個像這樣的圖類:

class ImmutableGraph<G> {
    Node<G> selectedNode;
    private ImmutableGraph(Node<G> initialNode) { selectedNode = initialNode; }

    //many more things
}

而且我目前正在使用這樣的(嵌套)生成器類

public static class GraphBuilder<B> {
    Node<B> currentNode;
    public GraphBuilder(B value){ currentNode = new Node(value); }
    public ImmutableGraph<B> build(){
        return new ImmutableGraph<B>(currentNode);
    }

    //many more things
}

使用(嵌套的)節點類

private static class Node<N> {
    private final N value;
    Array<Nodes<N>> neighbours;
    public Node(N v){ value = v; }

    //many more things
}

問題

我找不到使用生成器實例化ImmutableGraph的方法,因為返回類型不正確。 實際上,編譯建議GraphBuilder.build()應該返回ImmutableGraph<Node<B>>而不是ImmutableGraph<B>

到目前為止,我發現的唯一解決方案是將返回類型更改為ImmutableGraph<Node<B>>但由於所有圖(空圖除外)都是節點圖,因此感覺很愚蠢。 由於用戶從未與之交互,因此Node類型也令人困惑。

編輯:

  • 更正了構建器的工廠方法中的“新”

我認為您的構建方法應return new ImmutableGraph<B>(currentNode);

import java.util.List;

public class ImmutableGraph<G> {
Node<G> selectedNode;

private ImmutableGraph(Node<G> initialNode) {
    selectedNode = initialNode;
}

// many more things

public static class GraphBuilder<B> {
    Node<B> currentNode;

    public GraphBuilder(B value) {
        currentNode = new Node<B>(value);
    }

    public ImmutableGraph<B> build() {
        return new ImmutableGraph<B>(currentNode);
    }

    // many more things
}

private static class Node<N> {
    private final N value;
    List<Node<N>> neighbours;

    public Node(N v) {
        value = v;
    }

    // many more things
}

public static void main(String[] args) {
    GraphBuilder<Integer> builder = new GraphBuilder<Integer>(Integer.MAX_VALUE);
    ImmutableGraph<Integer> graph = builder.build();
    System.out.println(graph.selectedNode.value);
}
}

暫無
暫無

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

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