gpt4 book ai didi

java - 具有复杂泛型的 SWT 监听器

转载 作者:行者123 更新时间:2023-12-02 12:37:16 26 4
gpt4 key购买 nike

SWT 版本:4.4

Java 编译器:1.6

我正在尝试实现一个继承自 FocusAdapter 的监听器。监听器应该从一个控件复制到另一个控件,并且控件继承自 SWT Control(您可以观看导入)并实现 MyControl(getValue()、setValue(T val) 接口(interface))。

问题是它似乎无法识别通用 T 类型,并且语法一定有问题,但找不到问题所在。

我知道您可以声明一个泛型类型,其中 SuperType 可以是父类型或接口(interface)。您还可以使用 & 声明多个父类(super class)型。

编辑:我按照安迪的建议做了。现在,有关监听器类的新错误显示:

compilation error

请帮忙。代码就在下面。提前致谢。

MyControl.java

public interface MyControl<T> {
T getValue();

void setValue(T value);

void resetValue();
}

CopyOnFocusListener.java

import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.widgets.Control;

// This was the former, original question
//public class CopyOnFocusListener<C extends Control & MyControl<T>> extends FocusAdapter {

public class CopyOnFocusListener<T, C extends Control & MyControl<T>> extends FocusAdapter {

private final C fromControl;
private final C toControl;


public CopyOnFocusListener(final C fromControl,
final C toControl) {
super();
this.fromControl = fromControl;
this.toControl = toControl;
fromControl.addFocusListener(this);
}


@Override
public void focusLost(final FocusEvent event) {
final T fromValue = fromControl.getValue();
toControl.setValue(fromValue);
}
}

最佳答案

我不确定 Eclipse 生成该特定消息的确切原因,但问题是在某些平台上 Control 有一个包私有(private)抽象方法 - 类似于:

 abstract String windowClass();

因此 Control 只能由 org.eclipse.swt.widgets 包中的另一个类扩展。

您传递给 CopyOnFocusListener 的通用类需要扩展 Control 但也实现您的 MyControl 类,我认为这就是令人不安的地方 eclipse 。

您也许可以使用 Widget 代替 Control(Control 扩展了 Widget)。

我的系统上没有收到此错误消息,因为 macOS 版本的 Control 没有 windowClass 方法。

请注意,许多 SWT 控件会对 org.eclipse.swt.widgets 包之外的类进行特殊检查,尝试扩展该类并引发异常。因此,将 MyControl 接口(interface)添加到这些控件时会遇到麻烦。

关于java - 具有复杂泛型的 SWT 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090891/

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