gpt4 book ai didi

java - 使用Object类实现数学运算的多态性

转载 作者:行者123 更新时间:2023-12-04 18:01:01 26 4
gpt4 key购买 nike

我想在实现数学类对象之间的数学运算时,充分利用java中的多态性。
我从 How to add two java.lang.Numbers? 中的答案中得到使用 java.lang.Number 时的一般解决方案是了解或检查真实对象类并进行适当的硬编码转换为 float、int 等。

但这种方法实际上不是很面向对象。 Java 语言设计者选择为 java.lang.Number 类及其派生类提供一组方法 floatValue()intValue() 和很快。

鉴于此,我在下面提出的方法行不通吗?

为了以无缝方式实现数学运算,我想重写 Number 类 Hierarchy 以允许执行如下操作:

MyNumber a = b.getValue() + c.getValue();  

bc 的真实类型无关紧要

基类是:

public abstract class MyNumber {
protected Object mValue;

public abstract <N> N getValue();
}

例如,我的整数类如下所示:

public class MyInteger extends MyNumber {
public MyInteger(int value) {
mValue = value;
}

@Override
public Integer getValue() {
return (Integer) mValue;
}
}

MyFloat、MyDouble 等也是如此

最佳答案

它不适用于不同的类型。

public class MyInteger extends MyNumber {
public MyInteger(int value) {
mValue = value;
}

@Override
public Integer getValue() {
return (Integer) mValue;
}
}

public class MyFloat extends MyNumber {
public MyFloat(float value) {
mValue = value;
}

@Override
public Float getValue() { // first issue: types don't match. can't override
return (float) mValue; // second issue: type won't match with other getValue methods, arithmetic will fail
}
}

你的问题甚至在算术之前。您需要使用泛型或某种类型解析和/或类型转换机制来解决这个问题。

首先,覆盖方法需要具有匹配的签名,类型是该签名的一部分。

其次,在拥有单一类型之后,Java does not have operator overloading .因此,您将需要实现 MyNumber 具有的方法,该方法可以采用您的两个通用或高级对象并自行进行类型转换或转换。

关于java - 使用Object类实现数学运算的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35489663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com