我有一个类InteractiveChart,它包装一个Chart(接口)并通过将用户交互映射到 .setter 调用来为其添加交互性Chart。
1)因为不同的子类Chart可以具有不同的“额外”功能,我希望在包装类中有一个返回包装的getter Chart(无需进行未经检查的强制转换!)。我知道这样做的唯一方法是在包装类上有一个通用参数。
2) 这个包装类也打算在 NetBeans 的 GUI Builder 中使用,它的约束是它需要一个空的构造函数。但是,泛型参数的运行时类型由实例化它的代码决定,我无法控制 NetBeans 如何实例化它。在这种情况下,我希望它包装 a SimpleChart,如果用户想要包装其他东西,他们必须向JPanelGUI添加一个占位符并将图表添加到用户代码中。由于相同的约束,我不能在包装类上使用通用参数。
public class InteractiveChart<C extends Chart> extends JPanel {
private final C wrappedChart;
public InteractiveChart() {
// Compiler error: at this point C can be any other subclass of Chart
this(new SimpleChart());
}
public InteractiveChart(C chart) { wrappedChart = chart; }
public C getWrappedChart() { return wrappedChart; }
}
如何解决1和2之间的困境?
我目前最好的解决方案是创建一个InteractiveChart调用的子类InteractiveSimpleChart来固定泛型参数。我希望找到一种方法来消除这个子类,因为每次我添加一种新的图表时,我也必须为交互性添加一个新的包装器。
米脂
芜湖不芜
相关分类