簡體   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