Java Generics

public interface W {
}
//
public interface Wc {
	<T extends W> T tipo(Class<T> wcTipo);
}
//
public interface WcA extends W {
	<T extends W> T operacao(Class<T> wcaOperacao);
}
//
public interface WcB extends W {
	<T extends W> T operacao(Class<T> wcbOperacao);
}
//
public class WcTipo {
	public static Class<? extends WcA> wca() {
		return WcA.class;
	}
	public static Class<? extends WcB> wcb() {
		return WcB.class;
	}	
}
//
public interface WcAX {
	void x();
}
//
public interface WcAA<T> extends W {
	<T extends W> T wcaa();
}
//
public class WcAOperacao<WcAX> {
	public static Class<? extends WcAA> wcaa() {
		return WcAA.class;
	}
}
//
public interface WcBY {
	void y();
}
//
public interface WcBB<T> extends W {
	<T extends W> T wcbb();
}
//
public class WcBOperacao<WcBY> {
	public static Class<? extends WcBB> wcbb() {
		return WcBB.class;
	}	
}
/*Queria acessar desta forma meu objeto*/
public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Wc wc = null;
		wc.tipo(WcTipo.wca()).operacao(WcAOperacao.wcaa()).wcaa();//Ate aqui vai
		wc.tipo(WcTipo.wca()).operacao(WcAOperacao.wcaa()).wcaa().x();//Quero chegar ate aqui
	}
}

Alguem poderia me ajudar

Obrigado !!!
JVDS

Oi!

Eu só queria entender como tu não está tendo um NullPointerException ai :slight_smile:
E qual o motivo dessa aplicação toda ?

Abraços.

[quote=nel]Oi!

Eu só queria entender como tu não está tendo um NullPointerException ai :slight_smile:
E qual o motivo dessa aplicação toda ?

Abraços.[/quote]

Quero acessar o metodo x() como no exemplo abaixo esqueca o NullPointerException

//Ter acesso ao metodo x() que esta em WcAX
wc.tipo(WcTipo.wca()).operacao(WcAOperacao.wcaa()).wcaa().x()

Estou desenvolvendo aqui um objeto que vai me ajudar e muito o que pretendo fazer com a NF-e.

Obrigado !!!
JVDS

Não vi uma classe que implementa sua interface e que faça com que tenha acesso ao método X.
Você pode ter acesso somente ao método em questão, de qualquer forma, precisas da classe que a implemente.

Posso ter visto com pressa, mas não vi nenhuma classe que extenda a interface WcAX, que é a interface que contém o método x.
O ideal era postar sua necessidade do que explicar algo desse tipo.

Abraços.

[quote=nel]Não vi uma classe que implementa sua interface e que faça com que tenha acesso ao método X.
Você pode ter acesso somente ao método em questão, de qualquer forma, precisas da classe que a implemente.

Posso ter visto com pressa, mas não vi nenhuma classe que extenda a interface WcAX, que é a interface que contém o método x.
O ideal era postar sua necessidade do que explicar algo desse tipo.

Abraços.[/quote]

Com esta classe que esta me retornando os metodos certo nao sei se to viajado teria como por exemplo fazer alguma coisa do tipo Class<? extends WcAA> de retorno andei dando uma olha em codigo do tipo asssim tambem Class<? extends WcAA<? super T>>

public class WcAOperacao<WcAX> {
	public static Class<? extends WcAA<? super T>> wcaa() {
		return WcAA.class; //Teria que mudar este retorno tambem para dar certo
	}
}

Ok

Você pode ter uma classe abstrata que implemente uma interface e que em seu método generico você obrigue que a classe passada seja filha dessa classe abstrata. Dessa forma, você obrigado que a classe filha implemente todos os métodos descritos na interface.

Mas é como eu disse, amigo, você pode executar de N formas o generics, se vai ou não estar correto, é uma coisa, se vai funcionar da forma como espera, é outra.
Porque não divide conosco a sua ncessidade? :slight_smile:

Abraços.

[quote=nel]Você pode ter uma classe abstrata que implemente uma interface e que em seu método generico você obrigue que a classe passada seja filha dessa classe abstrata. Dessa forma, você obrigado que a classe filha implemente todos os métodos descritos na interface.

Mas é como eu disse, amigo, você pode executar de N formas o generics, se vai ou não estar correto, é uma coisa, se vai funcionar da forma como espera, é outra.
Porque não divide conosco a sua ncessidade? :slight_smile:

Abraços.[/quote]

Minha necessidade e o seguinte estou desenvolvendo aqui um objeto que vai consumir determinados webservice entao tipo os modelo certificados sao comuns por exemplo em CT-e ou NF-e o A1 e A3 mais o menos que seria. tem como vc me mostrar um exemplo do que vc falou logo acima.

[quote=nel]Você pode ter uma classe abstrata que implemente uma interface e que em seu método generico você obrigue que a classe passada seja filha dessa classe abstrata. Dessa forma, você obrigado que a classe filha implemente todos os métodos descritos na interface.

Mas é como eu disse, amigo, você pode executar de N formas o generics, se vai ou não estar correto, é uma coisa, se vai funcionar da forma como espera, é outra.
Porque não divide conosco a sua ncessidade? :slight_smile:

Abraços.[/quote]

Sobre esta idea que vc deu funcionou caso tenha mais alguma dica para melhorar o codigo sera bem aceito.

//Classe Modificada
public interface WcAA<T> extends W {
	T wcaa(String s);
}
//Classe Modificada
public interface WcBB<T> extends W {
	T wcbb(String s);
}
//Classe Nova
public abstract class WcAAAbstract<T> implements WcAA {
	public T wcaa(String s) {
		return null;
	}
}
//Classe Nova
public abstract class WcBBAbstract<T> implements WcBB {
	public T wcbb(String s) {
		return null;
	}
}
//Classe Moficada
public class WcAOperacao<T extends WcAX> {
	public static Class<? extends WcAAAbstract<WcAX>> wcaa() {
		Class<? extends WcAAAbstract<WcAX>> clazz = null;
		return clazz;		
	}
	public static Class<? extends WcBBAbstract<WcAX>> wcbb() {
		Class<? extends WcBBAbstract<WcAX>> clazz = null;
		return clazz;		
	}
}

Resultado deste objeto:

wc.tipo(WcTipo.wca()).operacao(WcAOperacao.wcaa()).wcaa("guj").x();

Obrigado !!!
JVDS

Oi!

E ai campeão, tudo certo?

Se você tem uma classe abstrata que implementa a interface, você não precisa declarar dentro dela os métodos da interface.
Somente uma classe concreta é obrigada a implementar os métodos declarados em uma interface. Se você realizar a implementação dos métodos da interface na classe abstrata, suas classes filhas não serão obrigadas a implementar tais métodos, pois os mesmo já estão implementadas na classe Pai, entende?

Dei a sugestão de criar uma classe abstrata pois obrigaria todas suas classes filhas a implementar os métodos descritos na interface e se você julgar necessário, podes criar método estaticos dentro dela ou até mesmo, outros métodos abstratos, que obrigariam o filho a implementar todos os métodos da interface e os que você declarar como abstrato dentro dela, consegue entender isso? É uma forma de você isolar sua necessidade e utilizando OO.

Fica ai a sugestão.
Você conseguiu entender o que quis dizer? :slight_smile:

Se precisar posto exemplo.
Abraços.

[quote=nel]Oi!

E ai campeão, tudo certo?

Se você tem uma classe abstrata que implementa a interface, você não precisa declarar dentro dela os métodos da interface.
Somente uma classe concreta é obrigada a implementar os métodos declarados em uma interface. Se você realizar a implementação dos métodos da interface na classe abstrata, suas classes filhas não serão obrigadas a implementar tais métodos, pois os mesmo já estão implementadas na classe Pai, entende?

Dei a sugestão de criar uma classe abstrata pois obrigaria todas suas classes filhas a implementar os métodos descritos na interface e se você julgar necessário, podes criar método estaticos dentro dela ou até mesmo, outros métodos abstratos, que obrigariam o filho a implementar todos os métodos da interface e os que você declarar como abstrato dentro dela, consegue entender isso? É uma forma de você isolar sua necessidade e utilizando OO.

Fica ai a sugestão.
Você conseguiu entender o que quis dizer? :slight_smile:

Se precisar posto exemplo.
Abraços.[/quote]

Blz cara obrigado ai pela dica teria como me mostrar um exemplo ai ja vou no caminho certo.

Ok

Obrigado !!!
JVDS

[quote=jvds@bol.com.br][quote=nel]Oi!

E ai campeão, tudo certo?

Se você tem uma classe abstrata que implementa a interface, você não precisa declarar dentro dela os métodos da interface.
Somente uma classe concreta é obrigada a implementar os métodos declarados em uma interface. Se você realizar a implementação dos métodos da interface na classe abstrata, suas classes filhas não serão obrigadas a implementar tais métodos, pois os mesmo já estão implementadas na classe Pai, entende?

Dei a sugestão de criar uma classe abstrata pois obrigaria todas suas classes filhas a implementar os métodos descritos na interface e se você julgar necessário, podes criar método estaticos dentro dela ou até mesmo, outros métodos abstratos, que obrigariam o filho a implementar todos os métodos da interface e os que você declarar como abstrato dentro dela, consegue entender isso? É uma forma de você isolar sua necessidade e utilizando OO.

Fica ai a sugestão.
Você conseguiu entender o que quis dizer? :slight_smile:

Se precisar posto exemplo.
Abraços.[/quote]

Blz cara obrigado ai pela dica teria como me mostrar um exemplo ai ja vou no caminho certo.

Ok

Obrigado !!!
JVDS[/quote]

Opa! Não se trata de caminho certo, foi uma sugestão que eu acho adequada rs.
Segue exemplo:

[code]public interface IExemplo {
String getNome();
}

public abstract class AExemplo {
public abstract int getIdade();

public static long soma(long a, long b) {
    return a+b;
}

}

public abstract class BExemplo {

}

public class ExemploA extends AExemplo {
// método declarado na interface
public String getNome() {
return “João da Silva”;
}
// Método abstrato da classe Pai
public int getIdade() {
return 50;
}
}

public class ExemploB extends BExemplo {
// Método da interface
public String getNome() {
return jvds;
}
}[/code]

Bom, o método declarado como static na classe abstrata AExemplo, é acessado como qualquer outro método/variavél estatica, ou seja:

AExemplo.some(10, 5);

Certo? Espero ter ajudado.
Abraços.

Valeu pelo exemplo vou queimar alguns neuronio que me resta qualquer coisa posto ai de novo.
Obrigado !!!
JVDS

Andei dando uma olhada e encrontei este link http://www.guj.com.br/java/125951-maneira-de-instanciar-uma-interface logico estou tomando NullPointer teria como instanciar realmente uma interface ?

Não, não há como instanciar uma interface. Você deve instanciar uma subclasse que implemente a interface.