TeNNoX
TeNNoX

Reputation: 2075

Codependent/circular generics loop

Problem:

I have two interfaces (here GenCarry and Gen):

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

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

It works when I ignore the 'rawtypes' Warning, but trying to complete them I don't get too far:

GenCarry<T extends Gen<GenCarry<T>>>
Gen<C extends GenCarry<Gen<C>>> -> error: not a valid substitute for the bounded parameter.

Question:

How would an interface like that look if complete - or is that even possible?

Is there a better approach to "generalize" an interface like that?

Upvotes: 6

Views: 97

Answers (1)

M A
M A

Reputation: 72874

You can define two type parameters:

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) {
       ...
    }
}

Upvotes: 2

Related Questions