Eu tenho uma classe Java que tem alguns membros. Eu quero escrever um elenco personalizado para ele. Eu queria saber como é que é possível fazê-lo?
Vamos supor que a classe é a seguinte:
class Person {
private int age;
private float weight;
// getters and setters and etc
}
Gostaria que o int
elenco para retornar o membro age
de um objeto, e o float
elenco para retornar a weight
de um objeto.
Por exemplo:
public class Main {
public static void main(String[] args) {
// create an object
Person P = new Person();
P.setAge(21);
P.setWeight(88.0);
// case 1: casting object to an existing data type
int personAge = (int) P; // would return the age
float personWeight = (float) P; // would return the weight
// case 2: casting an existing data type to an object
Person P2 = (Person) personAge; // this would create an instance of the object whose age is assigned and weight is not assigned
}
}
Eu queria saber se é possível fazer o oposto. Em particular, lançando int
para Person
retornaria uma instância de Person
que a sua age
é atribuído e similarmente para float
.
Eu sei que esta questão pode não ter uma resposta. Mas porque eu não encontrou qualquer resultado útil na minha pesquisa, eu decidi pedir-lo.
PS Eu entendo que para um String
, o toString
método poderia cuidar do caso 1.
Você não pode sobrecarregar o operador de conversão. Java não apoiá-lo e provavelmente nunca será.
Para converter um único valor para uma instância da classe desejado, usamos métodos de fábrica estáticos.
public static Person fromAge(int age) {
return new Person(age);
}
Eles frequentemente devolver um objecto parcialmente construída. No trecho acima, uma pessoa recém-construído tem apenas age
definir: outros campos terão seus valores padrão.
Para fazer o oposto, usamos getters.
public int getAge() {
return age;
}
No entanto, uma vez que
toString
já está lá, faz sentido para adicionar outros tipos de dados também.
toInt
não faz sentido quando é aplicada a mim (como uma instância da Person
classe). Poderia ser a minha altura, meu peso, minha idade, um número de vezes que eu fui a uma casa de banho hoje, etc. eu não posso me representar por um número int, nem a grande maioria das classes.
Por outro lado, toString
pode fazer este trabalho muito bem: posso dar-lhe (Leia retorno ) um resumo dos meus hobbies, a minha informação biométrica, mesmo a minha imagem. Ou posso deixá-lo para a implementação padrão, que ainda seria satisfatoriamente representar um objeto.