JavaFX:克隆 XYChart.Series 不笨

JavaFX: clone XYChart.Series doesn't dork

大家好,我遇到了这个问题:

XYChart.Series x = (XYChart.Series)((XYChart.Series)item).clone();

错误clone()java.lang.Object

中具有受保护的访问权限

我该如何解决? 重要的是 x 是值 的 副本并且 不是 指向克隆项目的指针。

使用clone要求类型实现此方法。一个主要部分,如果不是全部 JavaFX 类 不这样做,因为大多数包含可能附加不可克隆侦听器的属性。

这意味着您需要自己实施复制 XYChart.Series

既然你想要深拷贝这个系列,你可以使用下面的代码。根据您的用例,可能需要也可能不需要复制所有 XYChart.Data 对象:

public static <S, T> XYChart.Series<S, T> copySeries(XYChart.Series<S, T> series) {
    XYChart.Series<S, T> copy = new XYChart.Series<>(series.getName(),
            series.getData().stream()
                  .map(data -> new XYChart.Data<S, T>(data.getXValue(), data.getYValue()))
                  .collect(Collectors.toCollection(FXCollections::observableArrayList)));
    return copy;
}

如果不需要复制 Data 个对象,代码可以简化为

public static <S, T> XYChart.Series<S, T> copySeries(XYChart.Series<S, T> series) {
    XYChart.Series<S, T> copy = new XYChart.Series<>(series.getName(),
            FXCollections.observableArrayList(series.getData()));
    return copy;
}