Alguém pode me ajudar nessa questão do JavaRanch…
Can a construcot be declared private?
Yes
So how do you make an object…? Obviously you’d need a less restritive method (say, public) which can be called to create and return a new object.
Obrigado
Alguém pode me ajudar nessa questão do JavaRanch…
Can a construcot be declared private?
Yes
So how do you make an object…? Obviously you’d need a less restritive method (say, public) which can be called to create and return a new object.
Obrigado
Sim, um construtor pode ser privado...
public class Teste {
private Teste() {
}
}
Só que nesse caso vc não tem como instanciar a classe Teste (fora dela, claro...), a menos que você forneça uma maneira para isso (como um método public static)...
Depois pesquise sobre Singleton, talvez fique mais claro para você....
T+
Mas o construtor não deve ter mesmo nivel de acesso que a classe?
Digo… se a classe é public… o construtor não deve ser public?
Até tem… através de outro método factory.
Essa técnica é usada nos singletons.
Mas o construtor não deve ter mesmo nivel de acesso que a classe?Digo… se a classe é public… o construtor não deve ser public?
Por que? Onde você viu essa regra?
Sim, um construtor pode ser privado.
Então como você instancia um objeto daquela classe? Simples, por métodos estáticos!
Singleton é um pattern que usa desses recursos(e mais alguns) pra te retornar sempre a mesma instância de uma classe.
Mas cuidado pra não viciar em singletons e sair “gambiarrizando variáveis globais” por ai.
Pode sim.
Essa é uma técnica muito usada para criar classes que têm apenas métodos estáticos, para forçar a não criar nenhum objeto dessa classe.
class Math {
private Math() {}
public static double abs (double d) { if (d < 0) return -d; else return d; }
}
Você pode ter um construtor "auxiliar" que seja estático:
class Aluno {
private Aluno (String nome) { this.nome = nome; }
public Aluno (String nome, int idade) { this (nome); this.idade = idade; }
}
E você pode ter um método "factory" e deixar o construtor privado, para evitar o uso de "new".
Você pode fazer algo parecido com isso:
public class Classe {
private static final Classe INSTANCE = new Classe();
private Classe () {
}
public static final Classe getInstance() {
return INSTANCE;
}
}
[]´s
Daniel
Putz é, acho que bitolei numa ‘regra’ que li errado…
Obrigado pela resposta de todos.
Não, um construtor pode sim ter acesso mais restrito que a própria classe, senão o padrão Singleton por exemplo não poderia existir na linguagem java. você pode ter uma classe da seguinte forma:
public class Singleton {
private static Singleton unico;
public static Singleton getInstance() {
if (unico == null) {
unico = new Singleton();
return unico;
} else {
return unico;
}
}
private Singleton() {
}
}
Assim você pode garantir que apenas uma instancia desta classe exista;
Dica: Pesquise sobre padrões de projeto (Design Patterns);
é o tipo de duvida que vc pode abrir um notepad, criar um A.java, declarar um construtor private e compilar.
se compila é pq, em tese, pode. basta então entender a necessidade. O padrão Singleton é um exemplo. Factory pode ser outro. De qualquer forma vc quer restringir o new MinhaClasse()