Java 如何将分数对象转换为双对象?
当我学习Android时,我可以将一个对象类型转换为其他类型,如下所示:Java 如何将分数对象转换为双对象?,java,casting,Java,Casting,当我学习Android时,我可以将一个对象类型转换为其他类型,如下所示: TextView txtHello = (TextView) view; 其中view被定义为view,我认为,TextView是view的一个子类。现在,我有一个分数类,下面是它的内容: public class Fraction { private int numerator; private int denominator; public Fraction() { num
TextView txtHello = (TextView) view;
其中view
被定义为view
,我认为,TextView
是view
的一个子类。现在,我有一个分数类,下面是它的内容:
public class Fraction {
private int numerator;
private int denominator;
public Fraction() {
numerator = 0;
denominator = 1;
}
public Fraction(int value) {
numerator = value;
denominator = 1;
}
public Fraction(int numerator, int denominator) throws ArithmeticException {
if (denominator == 0) {
throw new ArithmeticException("Denominator can not be 0!");
}
if (denominator < 0) {
denominator *= -1;
numerator *= -1;
}
this.numerator = numerator;
this.denominator = denominator;
this.simplify();
}
public double toDouble() {
return (double) numerator / (double) denominator;
}
@Override
public String toString() {
return String.format("%d/%d", numerator, denominator);
}
public int getNumerator() {
return numerator;
}
public int getDenominator() {
return denominator;
}
private void simplify() {
int x = getGreatestCommonDivisor(numerator, denominator);
numerator /= x;
denominator /= x;
}
private int getGreatestCommonDivisor(int x, int y) {
x = x < 0 ? -x : x;
y = y < 0 ? -y : y;
if (x == 0 || y == 0) {
return x + y;
}
while (x != y) {
if (x > y) {
x = x - y;
} else {
y = y - x;
}
}
return x;
}
}
两行都是错误:
Double d1 = (Double) frac;
double d2 = (double) frac;
我知道我可以通过调用toDouble
方法将分数
转换为double
。但我想知道如何做,就像我在安卓系统中所知道的那样。我试图使分数扩展Double
但Double
是最终的类。如果我将一个新类创建为Double
,我如何执行上面的任何行代码,d1
和d2
是frac
的真正值?您不能强制转换,因为它们是不相关的类型
对于引用类型(如Fraction
和Double
),casting实际上并不构建casted to type-(Double)frac
的新实例,它只是对编译器说:“相信我,我知道这个Fraction
实际上是一个Double
,让我把它作为一个来使用。”
但是,编译器知道Double
不在Fraction
的继承层次结构中,因此它知道对Fraction
的引用不可能真正成为Double
,因此它禁止强制转换
但是您有一种方法允许将分数
转换为双精度
:
double d2 = frac.toDouble();
若我创建了一个新的类作为Double,那个么我该如何处理上面的任何行代码,而d1和d2实际上是frac的值
在Java中,如果不破解核心库,就无法做到这一点,这是不应该做的
您可以做的是扩展Double的父项Number
Number num = new Fraction(2, 3); // if Fraction extends Number
Number d = 1.33;
Java不允许按您期望的方式使用自定义强制转换运算符。toDouble()
有什么问题吗?你所要求的是不可能的。这是我的简单例子。我的问题是:如果我创建一个新类,例如,Number和makefraction扩展Number。这个代码行吗<代码>数字=(数字)压裂ỳnh是的,但是演员阵容是多余的。您只需编写Number num=frac代码>如果分数扩展了数字
。谢谢大家!现在我知道了代码TextView txtHello=(TextView)如何查看代码>在Android中工作,我错在哪里!谢谢你,安迪·特纳!现在我知道了代码TextView txtHello=(TextView)如何查看代码>在Android中工作,我错在哪里!谢谢你,彼得·劳瑞!现在我知道了代码TextView txtHello=(TextView)如何查看代码>在Android中工作,我错在哪里!
Number num = new Fraction(2, 3); // if Fraction extends Number
Number d = 1.33;