Oi pessoal,
Estou tentando fazer testes, mas está dando um pequeno erro.
public void testFormat()
{
DoubleHelper helper = new DoubleHelper(); //The constructor DoubleHelper() is undefined
String esperado = new String("1.000.000,57");
Double value = new Double ("1000000.565656565");
helper.setValue(value);
String resultado = helper.format();
assertEquals(esperado, resultado);
}
Minha classe DoubleHelper:
public class DoubleHelper extends WrapperHelper
{
private Double value;
public DoubleHelper(Double value)
{
super(value);
this.value = value;
}
public void setValue(Double value)
{
this.value = value;
}
public Double getValue()
{
return value;
}
}
O que está faltando??
[]´s
Sua classe DoubleHelper só tem 1 construtor e ele recebe um double como parametro, ao chamar o new DoubleHelper() você não está passando esse double…
DoubleHelper helper = new DoubleHelper(10.0);
Não se esqueça que construtores não são herdados e que um construtor padrão sem parametros só é criado automaticamente se sua classe não tiver nenhum…
No código abaixo você faz uma chamada ao construtor da classe DoubleHelper e não passa nenhum argumento, sendo que o construtor padrão sem argumentos só é incluído automaticamente em classes que não possuem nenhum construtor declarado. Logo, como você declarou um construtor, o construtor padrão não foi incluído automaticamente pelo compilado. Ou seja, você faz uma chamada a um construtor inexistente.
DoubleHelper helper = new DoubleHelper();
Mesmo passando um valor double continua dando o mesmo erro…
Se você estiver usando um JDK anterior ao 5.0 passe um objeto Double.
DoubleHelper helper = new DoubleHelper(new Double(10.0));
Desculpe… esqueci de dizer que estava usando Java 4…
Me responde outra coisa…
Antes minha classe estava assim:
public class DoubleHelper
{
private Double value;
public void setValue(Double value)
{
this.value = value;
}
public Double getValue()
{
return value;
}
}
E quando eu fazia o teste não dava nenhum erro de construtor is undefined
Por que??
Porque toda classe precisa ter um construtor, sempre, e nesse caso sua classe não tem nenhum, então o compilador adiciona um construtor padrão a ela, que é assim:
[code]public DoubleHelper(){
}[/code]
E esse construtor não recebe qualquer parametro. Quando você adiciona um outro construtor o compilador não coloca mais o padrão.
[quote=“jairelton”]Porque toda classe precisa ter um construtor, sempre, e nesse caso sua classe não tem nenhum, então o compilador adiciona um construtor padrão a ela, que é assim:
[code]public DoubleHelper(){
}[/code]
E esse construtor não recebe qualquer parametro. Quando você adiciona um outro construtor o compilador não coloca mais o padrão.[/quote]
Uma dúvida: o construtor padrão inicia as variáveis de instância com seus valores padrão, logo o resultado que ele produz, no caso da classe DoubleHelper, é o mesmo resultado que o construtor abaixo:
public DoubleHelper()
{
value = null;
}
Logo, eu fiquei na dúvida se o construtor incluído pelo compilador é parecido com o que eu declarei acima ou se ele é como o que você declarou no post acima. Caso ele seja como você falou, como é feita a inicialização das variáveis de instância, já que não há nenhum instrução no construtor?
Variaveis de instancia são inicializadas automaticamente, não depende do construtor.
para ser mais preciso o construtor padrão pareceria com isso:
public DoubleHelper(){
super();
}
Pois deve haver uma instrução super() ou this() na primeira linha de qualquer construtor, sempre.
Entendi agora. Valeu por mais este esclarecimento.