Em uma api q uso para fazer plugins para Minecraft, existe isso: Player p = Bukkit.getPlayer("Nome"); isso evita de eu ter q dar um new Player(), eu queria fazer isso também Teste t = Teste.getTeste("Teste");
Na verdade, pelo que vi, o método Bukkit#getPlayer não serve pra criar um novo Player, ele serve pra pegar um player já existente pelo nome.
Teriámos que entender melhor o problema que vc quer resolver, mas ingenuamente falando, uma possível solução seria isso:
class Teste {
private String nome;
private Teste(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
public static Teste getTeste(String nome) {
return new Teste(nome);
}
}
public class Main {
public static void main(String[] args) {
Teste t = Teste.getTeste("Testando");
System.out.println(t.getNome());
}
}
Mas é uma coisa meio boba fazer isso.
Pode ser interessante pra vc olhar esse padrão de projeto também:
Então, minha classe tem String name, double power e double maxPower e eu não queria dar um new pq vou estar deixando de lado o power e maxPower e não quero usar um return new Teste(name, power, maxPower);, como vc ja disse, o Bukkit.getPlayer() pega um player já existente e eu queria fazer exatamente isso, retornar name, power e maxPower tomando como base name
A idéia é vc poder chamar tanto passando apenas o nome (e nesse caso os poderes ficam em 0 por padrão) quanto vc poder passar o poder que quiser. O que acha?
Seguindo a ideia desse exemplo que tu postou e considerando que as informações de seus Player estejam salvos nesse arquivo .dat que você citou.
Você pode criar um método estático getTeste na sua classe Teste, esse método lê o seu arquivo, e instancia o objeto do tipo Teste que atende ao critério da sua consulta.
Mas não tem churumelas, para criar um objeto, em algum momento você vai instanciar uma classe utilizando a instrução new.
A única diferença é que nesse caso é o próprio método getTeste que fará isso.