我有一个具有几个成员的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。我知道对于String
,toString
方法会处理情况1。
答案 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
时。但是我认为您可以找到一个解决方案,方法是为它提供另一个参数,该参数定义要将其转换为哪个字段。
我真的为我的英语不好而感到抱歉,但我希望你能理解。