1

Java には、1 つのScalarNumberクラスと 2 つのクラスがScalarIntあり、ScalarFloatそれは から派生しScalarNumberます。ただし、2 つの間でキャストしようとすると、というエラーが表示されます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

基本的に、あなたがやりたいことは、犬を連れて猫にすることです。明らかに犬は猫ではないため、このキャストは機能しません。

とはいえ、犬は哺乳類です。この配役いいですね。猫も哺乳類なので、このキャストでもいいです。しかし、猫が犬になることはありませんし、犬が猫になることもありません。

できることは、ScalarInt のインスタンスを取り、そこから ScalarFloat のインスタンスを構築する ScalarFloat のコンストラクタを作成することです。この方法で変換しても、精度が失われることはありません。ただし、float から int に変換すると精度が失われるため、これは実行したくない場合があります。

于 2013-06-08T21:28:39.477 に答える
1

短い答え: いいえ、ScalarInt オブジェクトと ScalarFloat オブジェクトを互いにキャストすることはできません..

ただし、これらのオブジェクトの両方を ScalarNumber にキャストし、そのクラスで定義された共通のプロパティを回避策として使用できます。

于 2013-06-08T21:37:52.833 に答える