Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相互依赖/循环泛型循环_Java_Generics - Fatal编程技术网

Java 相互依赖/循环泛型循环

Java 相互依赖/循环泛型循环,java,generics,Java,Generics,问题: 我有两个接口(这里是GenCarry和Gen): 公共接口GenCarry{ 发电装设发电机(T发电机); } 公共接口发生器{ 无效应用(T进位); } 当我忽略“rawtypes”警告时,它会起作用,但尝试完成它们不会走得太远: GenCarry<T extends Gen<GenCarry<T>>> Gen<C extends GenCarry<Gen<C>>> -> error: not a vali

问题:

我有两个接口(这里是
GenCarry
Gen
):

公共接口GenCarry{
发电装设发电机(T发电机);
}
公共接口发生器{
无效应用(T进位);
}
当我忽略“rawtypes”警告时,它会起作用,但尝试完成它们不会走得太远:

GenCarry<T extends Gen<GenCarry<T>>>
Gen<C extends GenCarry<Gen<C>>> -> error: not a valid substitute for the bounded parameter.
GenCarry
Gen->error:不是有界参数的有效替代品。
问题:

如果这样的界面完整了会是什么样子?或者说可能吗


有没有更好的方法来“概括”这样的接口?

您可以定义两个类型参数:

public interface GenCarry<K extends GenCarry<K, T>, T extends Gen<T, K>> {
    GenCarry<K, T> setGen(T gen);
}

public interface Gen<K extends Gen<K, T>, T extends GenCarry<T, K>> {
    void applyOn(T carry);
}

class StringGenCarry implements GenCarry<StringGenCarry, StringGen> {
    @Override
    public StringGenCarry setGen(StringGen client) {
        ...
    }
}

class StringGen implements Gen<StringGen, StringGenCarry> {
    @Override
    public void applyOn(StringGenCarry network) {
       ...
    }
}
公共接口GenCarry{
发电装设发电机(T发电机);
}
公共接口发生器{
无效应用(T进位);
}
类StringGenCarry实现了GenCarry{
@凌驾
公共StringGenCarry setGen(StringGen客户端){
...
}
}
类StringGen实现了Gen{
@凌驾
公共无效应用程序(StringGenCarry网络){
...
}
}
public interface GenCarry<K extends GenCarry<K, T>, T extends Gen<T, K>> {
    GenCarry<K, T> setGen(T gen);
}

public interface Gen<K extends Gen<K, T>, T extends GenCarry<T, K>> {
    void applyOn(T carry);
}

class StringGenCarry implements GenCarry<StringGenCarry, StringGen> {
    @Override
    public StringGenCarry setGen(StringGen client) {
        ...
    }
}

class StringGen implements Gen<StringGen, StringGenCarry> {
    @Override
    public void applyOn(StringGenCarry network) {
       ...
    }
}