Java 如何使通配符的不同捕获兼容?

Java 如何使通配符的不同捕获兼容?,java,generics,Java,Generics,我试图创建一个带有一个类型参数的泛型类,classmyclass,它有一个带有两个类型参数的第二个泛型类的class变量,SecondClass。因为对于我的代码来说,V的类型实际上并不重要,我将该变量的类型声明为SecondClass,您可以通过调用泛型方法来捕获通配符 public Color getColor(E edge) { return getColorInternal(graph, edge); } private <X> Color getColorInter

我试图创建一个带有一个类型参数的泛型类,
classmyclass
,它有一个带有两个类型参数的第二个泛型类的class变量,
SecondClass
。因为对于我的代码来说,
V
的类型实际上并不重要,我将该变量的类型声明为
SecondClass,您可以通过调用泛型方法来捕获通配符

public Color getColor(E edge) {
    return getColorInternal(graph, edge);
}
private <X> Color getColorInternal(Graph<X, E> g, E e) {
    int degree = g.getInDegree(g.getTarget(e));
    // ...
}
公共颜色getColor(E边){
返回getColorInternal(图形、边);
}
专用颜色getColorInternal(图g、E){
int degree=g.getInDegree(g.getTarget(e));
// ...
}

这是一个典型的场景。您需要实现的类型参数,但希望对API用户隐藏它。如果许多方法受到影响,那么定义一个单独的、可能是嵌套的类
EdgePaInterInterInternal
会很有帮助。这个内部实现有第二个类型参数
G
,公共可见的实现
EdgePainter
将所有调用委托给
EdgePainterInternal

的一个实例,为什么不能将V添加为EdgePainter的一种类型呢?正如Ben Schulz巧妙地指出的:我需要一个类型参数来实现,但我想对API用户隐藏它。
public Color getColor(E edge) {
    return getColorInternal(graph, edge);
}
private <X> Color getColorInternal(Graph<X, E> g, E e) {
    int degree = g.getInDegree(g.getTarget(e));
    // ...
}