gpt4 book ai didi

java - 泛型和 API 设计

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:22 25 4
gpt4 key购买 nike

我正在为我们将要发布的产品构建一个库,并尝试将其设计为与目前路线图上的一些设计变更兼容。具体来说,库需要处理产品的不同版本,这些产品共享相同的命令,但对参数的可用选项有不同的要求。为了实现这一点,我有一个产品的抽象类,每个版本都有具体的类。此外,我还有一个针对外围设备的抽象类,它针对特定的外围设备有所不同和具体的类。我希望具体版本实现抽象类中的抽象方法,但针对指定的类型 T 而不是指定父类(super class)然后检查 instanceof。例如:

class PeripheralA {}

class PeripheralB {}

abstract class AbstractProduct<T> {

public abstract void SomeFunction(T param);
}

class ProductA extends AbstractProduct<PeripheralA> {
public void SomeFunction(T param);
}

class ProductB extends AbstractProduct<PeripheralB> {
public void SomeFunction(T param);
}

问题是编译器说我没有实现抽象方法SomeFunction。我之前的设计是不使用泛型,指定抽象类型。这里的问题是,如果将 PeripheralB 传递给 ProductA,将会出现一个我可以捕获的类转换异常,但我更希望代码首先不编译(并且就此而言,不使用类转换)。有什么方法可以实现我想要完成的目标,还是我只是错误地进行了设计?

最佳答案

不要使用T作为方法参数的类型;使用您为类指定的类型,即 PeripheralA,并且您必须为非抽象类提供方法体:

class ProductA extends AbstractProduct<PeripheralA> {
public void SomeFunction(PeripheralA param) {
// your impl here
}

关于java - 泛型和 API 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874504/

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