繁体   English   中英

Java中的自定义类型转换

[英]Custom type casting in Java

在Java中,我有一个ScalarNumber类和两个从ScalarNumber派生的ScalarIntScalarFloat类。 但是,当我尝试在两者之间进行强制转换时,出现一个错误,指出usemathobject.ScalarInt cannot be cast to usemathobject.ScalarFloat

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

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

考虑下面的类层次结构。

public class Mammal

和一些子类。

public class Dog extends Mammal
public class Cat extends Mammal

本质上,您想要做的就是养一只狗,然后把它养成猫。 显然,狗不是猫,因此这种投射永远无法起作用。

狗是哺乳动物。 这个演员很好。 猫也是哺乳动物,所以这个演员也很好。 但是猫永远不能成为狗,狗也永远不能成为猫。

您可以做的是为ScalarFloat创建一个构造函数,该构造函数将使用ScalarInt的一个实例并从中构造一个ScalarFloat的实例,以这种方式进行转换不会造成精度损失。 但是从float转换为int会导致精度损失,因此您可能不希望这样做。

简短答案:不能将ScalarInt和ScalarFloat对象彼此转换。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM