gpt4 book ai didi

Java 继承 : Validating Subclass Type at Compile Time

转载 作者:行者123 更新时间:2023-11-29 05:55:45 25 4
gpt4 key购买 nike

比如说,我有一个简单的类 Fruit 定义如下:

public class Fruit {
int price;

public boolean isEqualPrice(Fruit object) {
return (object.price == price);
}
}

现在,Fruit 有几个子类,例如 AppleOrangeMango 等。我想要只有当这些子类相同时,方法 isEqualPrice 才有效。例如,Apple.isEqualPrice(Apple) 是有效的,但 Apple.isEqualPrice(Orange) 则不是。我应该如何定义 isEqualPrice 的参数来实现这一点?我不想在 Fruit 的每个子类中覆盖 isEqualPrice

一个可能的解决方案可能是:

public boolean isEqualPrice(Fruit object) {
if(this.getClass() != object.getClass())
throw new IllegalArgumentException();
return (object.price == price);
}

但它只会在运行时报告类是否相同,用户无法通过观察方法签名来实现正确的参数类型。有什么方法可以在编译时检测到这一点吗?

注意: 我认为 enumcompareTo 方法就是这样一种方法,因为每个 enum 都有这个方法和类型的 enum 无法与其他类型进行比较。但是我不明白它是如何实现的。

最佳答案

使 Fruit 通用,或添加 fruit 的通用子类并从中派生 Apple、Orange 等。

class Fruit {
...
}

class FruitGeneric<T extends Fruit> extends Fruit {
public boolean isEqualPrice (T otherFruit) {
...
}
}

class Apple extends FruitGeneric<Apple> {
...
}

class Orange extends FruitGeneric<Orange> {
...
}

关于Java 继承 : Validating Subclass Type at Compile Time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199022/

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