1

在 Java 中,我有一个类ScalarNumber和两个类ScalarIntScalarFloat它们派生自ScalarNumber. 但是,当我尝试在两者之间进行转换时,我收到一条错误消息,显示usemathobject.ScalarInt cannot be cast to usemathobject.ScalarFloat.

当它们都派生自同一个类时,是否可以定义一种将一个类转换为另一个类的方法?

在我搜索时,我发现有些人想将一个类转换为原始类型,其他人说这是不可能的,但我想将一个类转换为另一个类。我确实通过定义类似的函数找到了如何在 C# 中执行此操作,public static explicit operator ScalarFloat(ScalarInt a)但我找不到 Java 等价物。我在 Windows Vista 上使用 Netbeans IDE 6.9.1。

4

2 回答 2

1

考虑以下类层次结构。

public class Mammal

和一些子类..

public class Dog extends Mammal
public class Cat extends Mammal

从本质上讲,你想做的就是养一只狗,让它变成一只猫。显然,狗不是猫,因此这种演员阵容永远不会起作用。

不过,狗是哺乳动物。这个演员阵容不错 猫也是哺乳动物,所以这个演员阵容也很好。但是猫永远不可能是狗,狗也永远不可能是猫。

您可以做的是为 ScalarFloat 创建一个构造函数,该构造函数将采用 ScalarInt 的实例并从中构建 ScalarFloat 的实例,这种转换方式不会导致精度损失。但是从浮点数转换为整数会导致精度损失,因此这是您可能不想做的事情。

于 2013-06-08T21:28:39.477 回答
1

简短回答:不,ScalarInt 和 ScalarFloat 对象不能相互转换。

但是,您可以将这两个对象都转换为 ScalarNumber 并使用该类中定义的通用属性作为解决方法

于 2013-06-08T21:37:52.833 回答