La forma de escribir de encargo método de fundición en Java

El Rezvani:

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 intmolde para devolver el miembro agede un objeto, y el floatmolde para devolver el weightde 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 inta Persondevolvería una instancia de Personque su ageestá 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 toStringmétodo se haría cargo de caso 1.

Andrew Tobilko:

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 ageestablecido: otros campos tendrán sus valores por defecto.

Hacer lo contrario, se utiliza captadores.

public int getAge() {
    return age;
}

Sin embargo, puesto toStringque ya está ahí, tiene sentido añadir otros tipos de datos también.

toIntno tiene sentido cuando se aplica a mí (como una instancia de la Personclase). 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, toStringpuede 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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=203966&siteId=1
Recomendado
Clasificación