Tengo una clase Java que tiene unos pocos miembros. Quiero escribir un molde personalizado para ello. Me preguntaba cómo es posible hacerlo?
Supongamos que la clase es la siguiente:
class Person {
private int age;
private float weight;
// getters and setters and etc
}
Me gustaría que el int
molde para devolver el miembro age
de un objeto, y el float
molde para devolver el weight
de un objeto.
Por ejemplo:
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
}
}
Me preguntaba si es posible hacer lo contrario. En particular, la fundición int
a Person
devolvería una instancia de Person
que su age
está asignado y lo mismo para float
.
Sé que esta pregunta puede no tener una respuesta. Pero debido a que no he encontrado ningún resultado útil en mi búsqueda, decidí preguntarle a él.
PS Yo entiendo que para una String
, el toString
método se haría cargo de caso 1.
No se puede sobrecargar el operador de conversión. Java no apoyarlo y probablemente nunca lo hará.
Para convertir un valor único a una instancia de la clase deseada, utilizamos métodos de fábrica estáticas.
public static Person fromAge(int age) {
return new Person(age);
}
A menudo devuelven un objeto parcialmente construida. En el fragmento anterior, una persona nueva construcción sólo se ha age
establecido: otros campos tendrán sus valores por defecto.
Hacer lo contrario, se utiliza captadores.
public int getAge() {
return age;
}
Sin embargo, puesto
toString
que ya está ahí, tiene sentido añadir otros tipos de datos también.
toInt
no tiene sentido cuando se aplica a mí (como una instancia de la Person
clase). Podría ser mi altura, mi peso, mi edad, un número de veces que fui a un baño de hoy, etc. No puedo representar a mí mismo por un número int, así tampoco una gran mayoría de las clases.
Por otro lado, toString
puede hacer este trabajo bastante bien: Te (lectura puede dar vuelta ) un resumen de mis aficiones, mi información biométrica, incluso mi imagen. O puedo dejar que la implementación predeterminada, que todavía sería satisfactoria representar un objeto.