Problema com o construtor genérico de uma classe?

Classe novo

public class Novo <C extends Compound> 
               extends StringProxySequenceReader<C> 
               implements FeaturesKeyWordInterface, 
                          DatabaseReferenceInterface, 
                          FeatureRetriever {
        //Construtor da classe acima 
	public Novo(String Cache, String accessionID, CompoundSet<C> compoundSet);

}

Sendo que Compound e compoundSet são interfaces

Estou com dificuldade em instanciar essas classe por causa do compoundSet.

Alguem pode me ajudar?

Fiz desta forma:

Novo<Compound>  teste;
teste = new Novo("teste","teste", ???????  );

Ainda não vi dois extends em Java. Isso é possivel? E tambem usar Interface em parametro de construtor? Bem diferente isso pra mim. Gostaria de saber como faz isso também :slight_smile:

teste = new Novo("teste","teste", null);

Se compoundSet não pode ser null, então é necessário instanciar um CompoundSet

CompoundSet<Compound> compoundSet = new CompoundSet<>();
Novo teste = new Novo("teste","teste", compoundSet);

@Jonas_B_a_r_r_o_s é assim pelo que pude perceber e logo abaixo eu implementei a resposta

<C extends Compound> diz para o compilador que o C tem que ser do tipo Compound

Como se fosse um regra que esse tipo genérico só aceite tipos ou derivação de Compound, significando assim uma restrição de tipo, não pode ser qualquer tipo genérico, tem que ser um tipo genérico com aquela regra.

Caro @d.fonseca quando colocar um problema assim também disponibilize todas as interfaces, todas as classes que fazem parte da sua dúvida, mas, vamos lá!

Exemplo:

Para chegar na classe novo as outras interfaces e classes devem existir antes, observe:

package Classes;
public interface Compound {
    
} 

package Classes;
public interface CompoundSet<C> {
    
}

package Classes;
public class CompoundSuper implements Compound {
    
}

package Classes;
public interface DatabaseReferenceInterface {
    
}

package Classes;
public interface FeatureRetriever {
    
}

package Classes;
public interface FeaturesKeyWordInterface {
    
}

package Classes;
public class CompoundSetImpl<C> implements CompoundSet<C> {
    
}

package Classes;
public class Novo<C extends Compound>
        extends StringProxySequenceReader<C> 
               implements FeaturesKeyWordInterface, 
                          DatabaseReferenceInterface, 
                          FeatureRetriever
{

    private final String Cache;
    private final String accessionID;
    private final CompoundSet<C> compoundSet;

    public Novo(String Cache, String accessionID, CompoundSet<C> compoundSet)
    {
        this.Cache = Cache;
        this.accessionID = accessionID;
        this.compoundSet = compoundSet;        
    }

    public String getCache() {
        return Cache;
    }

    public String getAccessionID() {
        return accessionID;
    }

    public CompoundSet<C> getCompoundSet() {
        return compoundSet;
    }
    
}

Para instânciar seria assim:

Novo<Compound> novo = new Novo<>("", "", new CompoundSetImpl<Compound>());

Sua pergunta: Estou com dificuldade em instanciar essas classe por causa do compoundSet?

Como CompoundSet é uma interface você precisa gerar uma implementação dela que no exemplo de classes logo acima é a CompoundSetImpl<C>, só lembrando que a regra de POO diz que somente classe concreta pode ser instanciada, ou seja, nem interface nem classe abstract pode ser instanciadas, mas, podem ser utilizadas como tipos.

Observação: o foco foi passar as observação da duvida, por isso as interfaces não possui implementação!