我很想使用jGraphT
来做这样的代码/*
interface DirectedGraph<V,E> { ...}
interface WeightedGraph<V,E> { ...}
*/
public class SteinerTreeCalc {
public SteinerTreeCalc( < ??? implements DirectedGraph<V,E>, WeightedGraph<V,E> > graph ) {
......
}
}
我想创建一个构造函数,要求实现两个接口的对象。
更新:
在我的目标中,已经选择了顶点和边缘(V和E)的类,但非常感谢那些想出来的人:
public class SteinerTreeCalc <V, E, T extends DirectedGraph<V, E> & WeightedGraph<V, E>>
{
....
}
答案 0 :(得分:21)
是的,有可能:
public class SteinerTreeCalc<T extends DirectedGraph<V,E> & WeightedGraph<V,E>> {
public SteinerTreeCalc(T graph) {
......
}
}
答案 1 :(得分:9)
应该像这样工作,但这是更复杂的泛型逻辑,希望你能适应:
public static interface DirectedGraph<V, E> {
}
public static interface WeightedGraph<V, E> {
}
public <V, E, T extends DirectedGraph<V, E> & WeightedGraph<V, E>> SteinerTreeCalc(T bothInterfaces) {
// do it
}
这些是你问题中提到的接口和构造函数。
答案 2 :(得分:6)
这可能是你想要的:
Hidden Features of Java
答案 3 :(得分:2)
您可以在上面的代码中使用 extends 代替 implements
答案 4 :(得分:0)
如果V
和E
是具体类而不是类型参数,那么您可以创建一个新接口,如下所示:
public interface DirectedWeightedGraph extends
DirectedGraph<V,E>, WeightedGraph<V,E> {
}
然后
public class SteinerTreeCalc {
public SteinerTreeCalc(DirectedWeightedGraph graph) {
...
}
}
问题是实际的参数必须实现DirectedWeightedGraph
接口。仅实现DirectedGraph<V,E>
和WeightedGraph<V,E>
的类型是不够的。