如何用Java编写自定义转换方法

时间:2019-06-06 08:59:26

标签: java casting

我有一个具有几个成员的Java类。我想为此编写一个自定义演员表。我想知道怎么可能吗?

假设类如下:

class Person {
   private int age;
   private float weight;

   // getters and setters and etc
}

我希望int强制转换返回对象的成员age,而float强制转换返回对象的weight

例如:

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

    }
}

我想知道是否可以做相反的事情。特别是,将int强制转换为Person将会返回Person的实例,该实例已为其age分配了一个值,并且与float类似。

我知道这个问题可能没有答案。但是由于我在搜索中没有找到有用的结果,因此决定提出要求。

P.S。我知道对于StringtoString方法会处理情况1。

3 个答案:

答案 0 :(得分:4)

您不能重载强制转换运算符。 Java不支持它,也许永远不会。

要将单个值转换为所需类的实例,我们使用静态工厂方法。

public static Person fromAge(int age) {
    return new Person(age);
}

它们通常返回部分构造的对象。在上面的代码段中,一个新构造的人员仅设置了age:其他字段将具有其默认值。

相反,我们使用吸气剂。

public int getAge() {
    return age;
}
  

但是,由于toString已经存在,因此也可以添加其他数据类型。

toInt应用于我时(作为Person类的实例)毫无意义。可能是我的身高,体重,年龄,今天去洗手间的次数等等。我无法用一个整数表示我自己,绝大多数课程也不能。

另一方面,toString可以很好地完成这项工作:我可以给您(阅读返回)我的爱好,我的生物特征信息甚至我的图片的摘要。或者,我可以将其保留为默认实现,它仍然可以令人满意地表示一个对象。

答案 1 :(得分:0)

您不会为此使用强制类型转换,只需在Person类中编写方法即可获取这些值。

public int getAge()
{
  return age;
}

答案 2 :(得分:0)

所以我只做过一次,但是我不确定我采用的方法是否合适。

但是我的方法是称为typeConverter的方法,我会给object命名为parameter,然后可以使用该parameter并查看它是什么对象类型然后使用您的值创建一个新的人。

尽管这种方法可能会引起问题,但是当您的班级有两个integer fields时。但是我认为您可以找到一个解决方案,方法是为它提供另一个参数,该参数定义要将其转换为哪个字段。

我真的为我的英语不好而感到抱歉,但我希望你能理解。