Construtores

42 respostas
M

Em uma classe que herda de duas outras classes, eu criei um construtor que chama os outros construtores das duas classes pais, e ainda acrescentei mais dois parâmetros a esse construtor dessa classe, no entanto isto não está funcionando, na hora que crio o objeto e chamo este construtor está dando vários errors log no programa apesar de deixar executar o programa, sabe o que pode ser?

acrescentei neste construtor o rotulo e a informacao alterada

public AjudanteParaAdaptaçãoSimNao(String rotulo, String informacaoalterada,AdaptadorDeInterfaceDoPluginPraxis a,Composite pai)

{

super(a, pai, new String[] {NAO_ESPECIFICADO, Sim, Não});

this.rotulo = rotulo;

this.informacaoalterada = informacaoalterada;

}

42 Respostas

Cabral

Olá,

você tem os erros que ele te mostra?

M

Em anexo os erros!

M

olá cabral,

Conseguiu observar os erros?

M

Ninguém sabe o que pode ser este erro não???

C

menina_mg, coloque as classes que vc fez para analisarmos melhor!

Pq vc disse em um momento que uma classe herdam outras duas! Entendi como se fosse múltipla herança!

Frentic

Pelo que pude ver pelo log de erro, não dá pra perceber se é ou não um erro do seu código pois dá erro na invocação de códigos do eclipse.

Tenta compilar e rodar via linha de comando se possível… usando ant ou mesmo o javac, ou faça um teste unitário que instancie sua classe e chame algum método…

Parece mais problema de ambiente…

Poderia postar os construtores das classes pai ?

Boa sorte,
Bruno Carvalho

Cabral

menina_mg:
olá cabral,

Conseguiu observar os erros?

Olá :slight_smile:

Observei mas não consegui compreendê-los.

faça como o colega disse coloque as classes aqui pro pessoal dar uma analisada.

Ricardo Cabral

M

Essa classe em que passei o construtor, herda de uma classe, e esta classe herda de uma segunda classe. Compreendeu?

Cabral

Sim, mas tem como voce postar pra gente o código fonte dessas classes separadas e também a parte no código onde você a chama e onde é o provavel erro?

Obrigado

Ricardo Cabral

M

construtores da classe pai da classe que enviei para voces :

Essa classe AjudanteParaAdaptaçãoContendoSeletorDeElementos herda de AjudanteParaAdaptação segue abiaxo os construtores:

public AjudanteParaAdaptaçãoContendoSeletorDeElementos(AdaptadorDeInterfaceDoPluginPraxis a, Composite pai, String[] itens) {

super(a, pai);

this.items = itens;

TratadorDeAlteraçãoDeCombo t = new TratadorDeAlteraçãoDeCombo(){
public void seleçãoMudada(final String seleção) {
			adaptador.executar(new ResourceSetModifyOperation(PraxisPlugin.recuperarRecursoTextual(recuperarInformaçãoDaAlteração())){

				protected void execute(IProgressMonitor arg0) throws InvocationTargetException, InterruptedException {
					AjudanteParaAdaptaçãoContendoSeletorDeElementos.this.seleçãoMudada(seleção);
				}
				
				},new NullProgressMonitor());
		}
		
	};

	seletor = FábricaDeInterfacesDeEntradaDeDados.criaComponenteSeletorDeElementos(t, this, pai, recuperarRótulo(), items);
}
public AjudanteParaAdaptação(AdaptadorDeInterfaceDoPluginPraxis adaptador, Composite pai){

this.adaptador = adaptador;

this.pai = pai;

}
M

Esta classe herda da classe que acabei de enviar pra voces!

public AjudanteParaAdaptaçãoSimNao(String rotulo, String informacaoalterada,AdaptadorDeInterfaceDoPluginPraxis a,Composite pai)

{

super(a, pai, new String[] {NAO_ESPECIFICADO, Sim, Não});

this.rotulo = rotulo;

this.informacaoalterada = informacaoalterada;

}
M

esta classe é herdada desculpe

M

os construtores que passei sao da classe pai de AjudanteParaAdaptaçãoSimNao

C

Assim:

public class Filho extends Pai{

...

}
public classe Pai extends Avo{

...

}

Isso?

O super usada no Filho irá apontar para Avô, certo? Corrijam-me se eu estiver errado!

E tb talvez não seja nem esse o problema, pq no log está dando erro em um plugin do próprio eclipse!!!

M

Exato ckornell

M

Exato ckornell

M

adicionarAjudante(new AjudanteParaAdaptaçãoContendoSimNao("","",this,conteudoDaAba2));

E crio o objeto dessa maneira chamando o construtor dessa classe

Cabral

Menina, você ja tentou retirar os acentos e o “ç” para ver se o número de erros diminui?

M

Acredito que isto não seja problema, as acentuações uma vez que, em vários

M

…em vários lugares utilizo da acentuação e não tem nenhum problema

gp7junior

Como assim?

Não entendi.

Uma classe que é filha de duas? Isso é herança multipla?
Pensei que Java não aceitasse herança multipla.

Por favor agora quero uma explicação de como exatamente isso acontece.

M

Nao herda de duas…

A classe AjudanteParaAdaptaçãoContendoSimNao herda da classe AjudanteParaAdaptaçãoContendoSeletorDeElementos e esta classe herda de AjudanteParaAdaptação. Compreendeu?

neohacker

Como assim?

Não entendi.

Uma classe que é filha de duas? Isso é herança multipla?
Pensei que Java não aceitasse herança multipla.

Por favor agora quero uma explicação de como exatamente isso acontece.

Java não aceita Herança Multípla

M

leia o que postei acima neohacker

M

Nao herda de duas…

A classe AjudanteParaAdaptaçãoContendoSimNao herda da classe AjudanteParaAdaptaçãoContendoSeletorDeElementos e esta classe herda de AjudanteParaAdaptação. Compreendeu?

M

Alguém pode me dar alguma idéia do que pode estar acontecendo?

Cabral

Olá menina, creio que a sua pergunta esta um pouco confusa pro pessoal entender. Eu mesmo estou tentando mas esta dificil. Você tem uma classe A que herda de B que herda de C, correto. Até ai eu entendi.

Agora você diz que funciona mas mesmo assim da o erro no log. é isso?

Esse erro do log esta meio confuso também, pois não consegui encontrar nenhuma mensagem familiar. Você consegue acompanhar a execução e postar aqui pra gente a linha exata de onde ele da o erro assim como o erro que ele mostra nessa linha?

Obrigado.

Ricardo Cabral

M

Ele deixa compilar normalmente, mas aparece esses erros de log, e quando aparece a instância da compilação não deixa executar nada no código!

M

nada no programa…me desculpe!

  • nao deixa executar nada no código(errado)
Cabral

Quando você tenta executar o código, ele provavelmente da um erro dizendo o por que não foi executado.

Você tem esse erro?

L

Seria interessante se vc postasse aqui o erro que aparece no console do eclipse quando vc tenta executar. Mas os erros daquele arquivo parecem se referir a erros do eclipse e não do seu código .

M

O problema não está no construtor descobri isso agora !
Obsere o código abaixo:

public class AjudanteParaAdaptacaoSimNao extends AjudanteParaAdaptaçãoContendoSeletorDeElementos {

private static String NAO_ESPECIFICADO = "Não especificado";
private String rotulo;
private String infalterada;
/**
 * Construtor.
 * @param a
 * @param pai
 * @param itens
 */
public AjudanteParaAdaptacaoSimNao(String rotulo, String infalterada, AdaptadorDeInterfaceDoPluginPraxis a, Composite pai) {
	super(a, pai, new String[] {NAO_ESPECIFICADO, "Sim", "Não"});
	this.rotulo = rotulo;
	this.infalterada = infalterada;
}

/* (non-Javadoc)
 * @see br.ufmg.dcc.synergia.praxis.views.adaptadores.ajudantes.AjudanteParaAdaptaçãoContendoSeletorDeElementos#recuperarRótulo()
 */
public String recuperarRótulo() {
	return rotulo;
}

O problema está nesse método public String recuperarRótulo(), aonde se pede para retornar o rótulo que é passado como para esta classe, no entanto esse método é abstrato na classe pai e também é chamado na classe pai.
Observe o código da classe pai desta classe:

ublic abstract class AjudanteParaAdaptaçãoContendoSeletorDeElementos extends AjudanteParaAdaptação {

/**
 * items que aparecerão no compo para ser selecionados.
 * 	 */
private String[] items;
private ComponenteSeletorDeElementos seletor;
/**
 * @param adaptador
 * @param pai
 */
public AjudanteParaAdaptaçãoContendoSeletorDeElementos(AdaptadorDeInterfaceDoPluginPraxis a, Composite pai, String[] itens) {
	super(a, pai);
	this.items = itens;
	TratadorDeAlteraçãoDeCombo t = new TratadorDeAlteraçãoDeCombo(){

		public void seleçãoMudada(final String seleção) {
			adaptador.executar(new ResourceSetModifyOperation(PraxisPlugin.recuperarRecursoTextual(recuperarInformaçãoDaAlteração())){

				protected void execute(IProgressMonitor arg0) throws InvocationTargetException, InterruptedException {
					AjudanteParaAdaptaçãoContendoSeletorDeElementos.this.seleçãoMudada(seleção);
				}
				
				},new NullProgressMonitor());
		}
		
	};

	seletor = FábricaDeInterfacesDeEntradaDeDados.criaComponenteSeletorDeElementos(t, this, pai, recuperarRótulo(), items);
}

public abstract String recuperarRótulo();
M

E ele deixa executar o programa, não aparece nenhum erro no console!

M

E eu crio um objeto que chama esta classe em outra classe, da seguinte maneira:

adicionarAjudante(new AjudanteParaAdaptacaoSimNao("ana","ana",this,conteudoDaAba1));
M

ALGUÉMMMMM??? ALGUMA IDÉIA???

Roger75

menina_mg:
O problema não está no construtor descobri isso agora !
Obsere o código abaixo:

public class AjudanteParaAdaptacaoSimNao extends AjudanteParaAdaptaçãoContendoSeletorDeElementos {

private static String NAO_ESPECIFICADO = "Não especificado";
private String rotulo;
private String infalterada;
/**
 * Construtor.
 * @param a
 * @param pai
 * @param itens
 */
public AjudanteParaAdaptacaoSimNao(String rotulo, String infalterada, AdaptadorDeInterfaceDoPluginPraxis a, Composite pai) {
	super(a, pai, new String[] {NAO_ESPECIFICADO, "Sim", "Não"});
	this.rotulo = rotulo;
	this.infalterada = infalterada;
}

/* (non-Javadoc)
 * @see br.ufmg.dcc.synergia.praxis.views.adaptadores.ajudantes.AjudanteParaAdaptaçãoContendoSeletorDeElementos#recuperarRótulo()
 */
public String recuperarRótulo() {
	return rotulo;
}

O problema está nesse método public String recuperarRótulo(), aonde se pede para retornar o rótulo que é passado como para esta classe, no entanto esse método é abstrato na classe pai e também é chamado na classe pai.
Observe o código da classe pai desta classe:

ublic abstract class AjudanteParaAdaptaçãoContendoSeletorDeElementos extends AjudanteParaAdaptação {

/**
 * items que aparecerão no compo para ser selecionados.
 * 	 */
private String[] items;
private ComponenteSeletorDeElementos seletor;
/**
 * @param adaptador
 * @param pai
 */
public AjudanteParaAdaptaçãoContendoSeletorDeElementos(AdaptadorDeInterfaceDoPluginPraxis a, Composite pai, String[] itens) {
	super(a, pai);
	this.items = itens;
	TratadorDeAlteraçãoDeCombo t = new TratadorDeAlteraçãoDeCombo(){

		public void seleçãoMudada(final String seleção) {
			adaptador.executar(new ResourceSetModifyOperation(PraxisPlugin.recuperarRecursoTextual(recuperarInformaçãoDaAlteração())){

				protected void execute(IProgressMonitor arg0) throws InvocationTargetException, InterruptedException {
					AjudanteParaAdaptaçãoContendoSeletorDeElementos.this.seleçãoMudada(seleção);
				}
				
				},new NullProgressMonitor());
		}
		
	};

	seletor = FábricaDeInterfacesDeEntradaDeDados.criaComponenteSeletorDeElementos(t, this, pai, recuperarRótulo(), items);
}

public abstract String recuperarRótulo();</blockquote>

Como você descobriu que o problema está neste método recuperarRótulo?
No caso acho que te ajudaria bastante usar o Debug do Eclipse para acompanhar a execução passo a passo.
Os nomes das suas classes estão um pouquinho extensos, não? Colocar um nome como AjudanteParaAdaptaçãoContendoSeletorDeElementos deixa meio confuso pra ler…

J2Alex

Olá,

Dificilmente alguém irá responder a sua dúvida por alguns motivos:

  • Quando colocar código no forum faça isso utilizando a tag Code, pois isso facilita a leitura dos códigos;
  • Os nomes que você usou, são muito longos e confusos… vai ser difícil alguém perder um tempo razoável só pra tentar entender as classes que você criou;
  • Você não foi muito clara ao descrever o problema;
  • Você colocou trechos que não demonstram muito bem o fluxo das coisas acontecendo, o que dificulta o entendimento;
  • até o momento você não disponibilizou sequer o erro que está ocorrendo.

Não fique brava… são só algumas dicas que podem facilitar na hora de alguém ajudar… resolva os pontos que lhe descrevi e com certeza alguém irá achar a solução do seu problema.

erickcellani

J2Alex:
Olá,

Dificilmente alguém irá responder a sua dúvida por alguns motivos:

  • Quando colocar código no forum faça isso utilizando a tag Code, pois isso facilita a leitura dos códigos;
  • Os nomes que você usou, são muito longos e confusos… vai ser difícil alguém perder um tempo razoável só pra tentar entender as classes que você criou;
  • Você não foi muito clara ao descrever o problema;
  • Você colocou trechos que não demonstram muito bem o fluxo das coisas acontecendo, o que dificulta o entendimento;
  • até o momento você não disponibilizou sequer o erro que está ocorrendo.

Não fique brava… são só algumas dicas que podem facilitar na hora de alguém ajudar… resolva os pontos que lhe descrevi e com certeza alguém irá achar a solução do seu problema.

DISSE TUDO!

quer ajuda??? nós ajude a entender o seu problema!

desculpa… mas realmente facilitará mto seguindo as dicas do amigo acima!

M

Realmente não fui muito clara com a descrição dos meus erros, desculpa e obrigada pela atenção de todos vocês vou tentar ser o mais clara possível para cada um de vocês!

1 - Primeiramente a escolha dos nomes nao é minha, no entanto ficarão extensos realmente.

2- Quanto ao erro que está acontecendo: o erro não acontece na compilação, ou seja o erro nao aparece no console, mas quando vou executar o programa ele abre mas nao roda ok?

3- Eu apresentei 3 classes a, b e cc herda de b e b herda de a. Inicialmente pensei que o problema estava no construtor, mas depois de mudar o método

public String recuperarRótulo() {

return rotulo;

}

para

public String recuperarRótulo() {

return uma string qualquer;

}

o programa roda normalmente!

Este método é da classe c e é abstrata na classe b.

E o que eu queria era passar este rótulo como parametro para a classe c através de uma outra classe e depois recuperá-lo mas isso nao está sendo possível ok?

Bem tentei ser clara, senão for por favor me ajudem a esclarecer

M

ALGUÉMMMMMMMMMMM???

J2Alex

Ele deve estar gerando alguma exception… qual seria?

Omeganosferatu

Que tipo de exception lança ??? vale lembrar que seu método " recuperaRótulo() {`} " devia ser " recuperaRotulo(){} " … só pra evitar confusão

as vezes quem chama ele adiante no programa esqueceu o acentuo … se voce colocar a exception pra gente eu acho que ficaria mais facil
vlw

Criado 8 de maio de 2007
Ultima resposta 11 de mai. de 2007
Respostas 42
Participantes 11