Como escrever método de fundição em Java personalizado

O Rezvani:

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 intelenco para retornar o membro agede um objeto, e o floatelenco para retornar a weightde 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 intpara Personretornaria uma instância de Personque 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 toStringmétodo poderia cuidar do caso 1.

Andrew Tobilko:

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 agedefinir: outros campos terão seus valores padrão.

Para fazer o oposto, usamos getters.

public int getAge() {
    return age;
}

No entanto, uma vez que toStringjá está lá, faz sentido para adicionar outros tipos de dados também.

toIntnão faz sentido quando é aplicada a mim (como uma instância da Personclasse). 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, toStringpode 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.

Acho que você gosta

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