gpt4 book ai didi

java - 合并两个相似的数字类实现

转载 作者:行者123 更新时间:2023-11-29 03:09:12 26 4
gpt4 key购买 nike

我有两个类,它们几乎为两种不同的数字类型实现了相同的操作(getHexadecimalValue() 方法除外):

public class IntegerType
{
private int value;

public IntegerType()
{
value = 0;
}

public void setValue(int value)
{
this.value = value;
}

public int getValue()
{
return value;
}

public String getHexadecimalValue()
{
int integerValue = (int) getValue();

String hexadecimal = ValueConversions.toHexadecimal(integerValue);

return hexadecimal;
}
}

public class FloatingPointType
{
private float value;

public FloatingPointType()
{
value = 0;
}

public void setValue(float value)
{
this.value = value;
}

public float getValue()
{
return value;
}

public String getHexadecimalValue()
{
float floatingValue = (float) getValue();

int intBits = Float.floatToRawIntBits(floatingValue);

return ValueConversions.toHexadecimal(intBits);
}
}

我想知道减少这种冗余的最佳方法是什么,例如像这样定义一个名为 NumberType 的父类(super class):

public abstract class NumberType
{
protected Number value;

public NumberType()
{
setValue(0);
}

public void setValue(Number value)
{
this.value = value;
}

public Number getValue()
{
return value;
}

public abstract String getHexadecimalValue();
}

现在的问题是,任何数字都可以传递给我的继承类,但我只想分别接受 intsfloats,同时仍将冗余保持在最低限度:

public class IntegerType extends NumberType
{
@Override
public String getHexadecimalValue()
{
// Crashes on runtime if the value doesn't happen to be of the expected type
int integerValue = (int) getValue();

String hexadecimal = ValueConversions.toHexadecimal(integerValue);

return hexadecimal;
}
}

这是否可以通过仍然保持适当的类型检查来完成?

最佳答案

你可以这样试试。

public abstract class NumberType<T extends Number> {
protected T value;

public NumberType(T value) {
this.value = value;
}

public void setValue(T value) {
this.value = value;
}

public T getValue() {
return value;
}

public abstract String getHexadecimalValue();
}

public class FloatingPointType extends NumberType<Float> {
public FloatingPointType() {
super(0f);
}

public String getHexadecimalValue() {
return ValueConversions.toHexadecimal(Float.floatToRawIntBits(value));
}
}

注意:Float 和 Integer,这两个类都有静态的 toHexString 方法,如果你习惯使用它们,你可以直接使用它们。

  1. public static String toHexString(float f)
  2. public static String toHexString(int i)

关于java - 合并两个相似的数字类实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30370074/

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