为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_花开花谢_0 2023-01-05 10:00:11
我有一个有几个成员的 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的实例,对于.Personagefloat我知道这个问题可能没有答案。但是因为我在搜索中没有找到任何有用的结果,所以我决定问问它。PS 我知道对于 a String,该toString方法会处理案例 1。
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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

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

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

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

相反,我们使用吸气剂。

public int getAge() { 
   return age;
}

但是,由于toString已经存在,添加其他数据类型也是有意义的。

toInt当它应用于我时(作为Person类的一个实例)没有任何意义。可能是我的身高、体重、年龄、今天去洗手间的次数等等。我不能用一个整数来代表我自己,大多数班级也不能。

另一方面,toString可以很好地完成这项工作:我可以给你 (read return ) 我的爱好、我的生物识别信息,甚至我的照片的总结。或者我可以将它留给默认实现,它仍然可以令人满意地表示一个对象。


查看完整回答
反对 回复 2023-01-05
?
慕标5832272

TA贡献1966条经验 获得超4个赞

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

public int getAge(){
  return age;
}


查看完整回答
反对 回复 2023-01-05
?
12345678_0001

TA贡献1802条经验 获得超5个赞

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

但我的方法是一个名为 的方法typeConverter,我会给它一个objectas parameter,然后你可以parameter看看它是什么对象类型,然后用你的值创建一个新的 Person。

虽然这种方法可能会导致问题,但当您的班级有两个integer fields. 但我认为你可以找到一个解决方案,通过给它另一个参数来定义,你想将它转换到哪个字段。

我真的很抱歉我的英语不好,但我希望你能明白原则。


查看完整回答
反对 回复 2023-01-05
  • 3 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信