una subclase para especificar un genérico muestra una falta de coincidencia

Estoy escribiendo un algoritmo primo en java. Para permitir una buena extensibilidad, utilicé algunos genéricos. Pero hay un desajuste genérico que me molesta mucho. Lo resumo aquí y muestro mi código a continuación.

La clase de LazyPrimMST es calcular el mst de un gráfico. Así que defino un genérico para presentar el tipo de todo tipo de WeightedGraph. En mi implementación, la parte de los genéricos LazyPrimMST es>, y hay dos subclases de WeightedGraph y son DenseWeightedGraph y SparseWeightedGraph. En mi función principal de prueba, quiero calcular el mst para una instancia de DenseWeightedGraph, por lo que creo una instancia de los genéricos de la parte de LazyPrimMST como DenseWeightedGraph, pero obtengo un error extraño que esBound mismatch: The type DenseWeightedGraph<Double> is not a valid substitute for the bounded parameter <Graph extends WeightedGraph<Weight>> of the type LazyPrimMST<Weight,Graph>

Información de error

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Bound mismatch: The type DenseWeightedGraph<Double> is not a valid substitute for the bounded parameter <Graph extends WeightedGraph<Weight>> of the type LazyPrimMST<Weight,Graph>

código relacionado, parte de la clase LazyPrimMST

public class LazyPrimMST<Weight extends Number & Comparable<Weight>, Graph extends WeightedGraph<Weight>> {
    private Graph G;
    private MinHeap<Edge<Weight>> pq;
    private boolean[] marked; 
    private List<Edge<Weight>> mst;
    private Weight mstWeight;

    public LazyPrimMST(Graph graph) {
        this.G = graph;
        pq = new MinHeap<>(G.E());
        marked = new boolean[G.V()];
        mst = new ArrayList<>();

parte de mi prueba principal que contiene la línea de error

DenseWeightedGraph<Double> g2 = new DenseWeightedGraph<>(8, false);
ReadWeightedGraph readGraph2 = new ReadWeightedGraph(g2, filename);
System.out.println("test g1 in Dense Graph:");
g2.show();

System.out.println();

LazyPrimMST<Double, DenseWeightedGraph<Double>> mst = new LazyPrimMST<>(g2); // error line
for (Edge<Double> edge: mst.mstEdges()) {
    System.out.println("(" + edge + ") ");
}

parte de DenseWeightedGraph

public class DenseWeightedGraph<Weight extends Number & Comparable> implements WeightedGraph {
    private int n;  
    private int m;  
    private boolean directed;
    private Edge<Weight>[][] g;

    public DenseWeightedGraph(int n, boolean directed) {
        this.n = n;
        this.m = 0;
        this.directed = directed;

        g = new Edge[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                g[i][j] = null;
            }
        }

    }
Respuesta 1

Estoy usando Processing, y tengo un método (smooth () aquí) que me gustaría usar para el objeto PApplet cuando dibujo en la ventana y para PGraphics cuando dibujo una imagen. El problema es que estas dos ...

He visto muchas variaciones diferentes de código sobre cómo obtener una lista de aplicaciones instaladas y mostrarlas en un ListView al usuario, pero ninguna ha sido exitosa para mí. Lo que me gustaría saber es ...

Quiero crear un sistema que tenga una función de entrada / salida. Probé este código como prueba antes de incluir la función en mi sistema: import java.text.SimpleDateFormat; import java.util.Date; ...

Tengo un JLabel y, a medida que se expande la ventana JFrame, el tamaño de la fuente cambia automáticamente. El texto que está en JLabel se puede abreviar o poner en texto completo de la siguiente manera: porque estoy usando ...