A vantagem é ter código mais conciso, e, por conseqüência, mais legível.
Metodo Construtor
6 Respostas
Não se entendi a pergunta… mas vamos lá.
Não há diferença sensível quanto a performance, e não me vem à cabeça nenhum exemplo de algo que não possa ser feito através de métodos.
Acredito que seja apenas pela concisão/praticidade, mesmo.
Um construtor deve ser responsável por criar o objeto em um estado válido, obedecendo asua invariante. Caso não seja possível em apenas um cosntrutor garantir isso, uma factory pdoe ser mais adequada.
Confuso? Esse texto pode ajudar: Contratos Nulos
Com sobrecarga de Construtor vc vai poder construir os objetos de maneiras diferentes, só isso.
Pra dar a utilidade disso, tome como exemplo a classe Integer.
Nesta classe existe um construtor que recebe um argumento do tipo primitivo int e outro que recebe uma String.
O que feito para construir um Integer a partir de um int é totalmente diferente do que é feito a partir de uma String. Então faz sentido ter dois contrutores diferentes.
Outra coisa é que vc tem mais controle nos sistemas em que os objetos não ficam mudando de estado,ou seja, nascem de um jeito e morrem do mesmo jeito, esse é um dos motivos para se pensar se realmente os metodos set’s são necessários para vc. Com os set’s vc pode correr o risco desnecessario de mudar o estado de um objeto quando vc não queria isso.
Sei lá acho que é mais ou menos isso.
Pessoal,
Estou fazendo manutencao num codigo e devido a logica implementada no codigo atual surgiu a duvida de qual a vantagem de usar a sobrecarga de construtores, nesse codigo que estou fazendo a manutencao ele foi usado somente para setar valores de variaveis o que poderia ser feito por um metodo, segue um exemplo do que estou dizendo:
public class GenericTests {
String x = "inicio";
GenericTests(){
}
GenericTests(final String x){
this.x = x;
}
public void setX(final String x){
this.x = x;
}
public static void main(String[] args) {
//Utilizarei sobrecarga para setar o valor da variavel x
GenericTests gt = new GenericTests("sobrecarga construtor");
System.out.println(gt.x);
//Utilizarei um metodo para setar o valor da variavel x
gt.setX("metodo");
System.out.println(gt.x);
}
}
Valeu!!
ok, qto a ser mais legivel creio q eh um pouco subjetivo mas tudo bem, e qto a OO, performance ou algo q nao possa ser feito atraves de metodos?
valeu!!!
eh nesse exemplo q eu useu nao tem muita diferenca mas nesse site tem uma explicacao sobre esse assunto:
http://www.ccnyddm.com/AdvJava/java_constructor_tutorial.htm
valeu!