Generics

7 respostas
brunohansen

Fala ai pessoal!

Alguém sabe me dizer o porque de eu não poder fazer a chamada (AQUI!)?

public class Generics<TipoBase, IF extends IF1 <TipoBase, ? extends IF2<TipoBase, IF>>> implements IF2<TipoBase, IF> {
	
	private IF if1;
	
	void chamaMetodo(TipoBase _parametro){
		if1.metodo(this); (AQUI!)
	}
	
}

interface IF1 <TipoBase, IF extends IF2<TipoBase, ? extends IF1<TipoBase, IF>>> {
	
	void metodo(IF _parametro);
	
}

interface IF2<TipoBase, IF extends IF1 <TipoBase, ? extends IF2<TipoBase, IF>>>{
		
}

Valews!

7 Respostas

gcobr

Que eu saiba, isso não vai compilar:

interface IF1 <TipoBase, IF extends IF2<TipoBase, ? extends IF1<TipoBase, IF>>> {
	
}

Nem isso:

interface IF2<TipoBase, IF extends IF1 <TipoBase, ? extends IF2<TipoBase, IF>>> {
	
}
brunohansen
gcobr:
Que eu saiba, isso não vai compilar:
interface IF1 <TipoBase, IF extends IF2<TipoBase, ? extends IF1<TipoBase, IF>>> {
	
}

Nem isso:

interface IF2<TipoBase, IF extends IF1 <TipoBase, ? extends IF2<TipoBase, IF>>> {
	
}

Porém compila!

M

Em Java não existe maneira de fazer uma herança multipla que você esta tentando fazer
com dois extends!

brunohansen

machinesque:
Em Java não existe maneira de fazer uma herança multipla que você esta tentando fazer
com dois extends!

Isso não é herança múltipla. É generics!

Esse código compila e funciona. O único problema é aquela chama ali!

M

eu acho que você usaria o seguinte:

void chamaMetodo(TipoBase _parametro){

_parametro = if1.metodo(this); (AQUI!)

}

e ali no this voce precisa passar algum dos parametros globais, da classe que possui o
metodo chamaMetodo.

Algo assim this.parametro

Acho que seria isso;

JimMorrison
public class Generics<TipoBase, IF extends IF1>  implements IF2 {
    
    private IF if1;
    
    public static void main(String[] args){
        Generics<String,  IF1> gen = new Generics();
        gen.setIf1(new IF1(){
            public void metodo(IF2 _parametro) {
                _parametro = new IF2(){ public String toString(){return "teste";}};
                System.out.println(_parametro);
            }});
            gen.chamaMetodo("teste");
    }
    void chamaMetodo(TipoBase _parametro){
        getIf1().metodo(this);
    }
    
    public IF getIf1() {
        return if1;
    }
    
    public void setIf1(IF if1) {
        this.if1 = if1;
    }
    
}
interface IF1 <TipoBase, IF extends IF2<TipoBase, ? extends IF1<TipoBase, IF>>> {
    
    void metodo(IF _parametro);
    
}

interface IF2<TipoBase, IF extends IF1 <TipoBase, ? extends IF2<TipoBase, IF>>>{}

a idéia é essa?

brunohansen
public class Generics<TipoBase, IF extends IF1>  implements IF2 {

O problema com o código acima é que vc não tipou IF1 nem IF2.

Se for para usar sem tipar eu tiro o generics e tipo tudo para object!

Só que ai o código fica meio ruim “Fracamente tipado”

public class Generics<TipoBase, IF extends IF1<Tipar aqui>>  implements IF2<Tipar aqui> {
Criado 29 de agosto de 2007
Ultima resposta 4 de set. de 2007
Respostas 7
Participantes 4