【发布时间】:2017-12-18 20:12:32
【问题描述】:
SWT 版本:4.4
Java 编译器:1.6
我正在尝试实现我的一个继承自 FocusAdapter 的侦听器。侦听器应该从一个控件复制到另一个控件,并且这些控件继承自 SWT Control(您可以观看导入)并实现 MyControl(getValue()、setValue(T val) 接口)。
问题是它似乎无法识别泛型 T 类型,并且语法一定有问题,但找不到什么。
我知道你可以声明一个泛型类型,其中 SuperType 可能是父类或接口。你也可以用 & 声明多个超类型。
已编辑:我按照安迪的建议做了。现在关于监听器类的新错误说:
请帮忙。 代码就在下面。提前致谢。
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);
}
}
【问题讨论】:
-
声明类型变量:
CopyOnFocusListener<T, C extends Control & MyControl<T>> -
什么是
MyControl。编译这个我没有得到任何错误(猜测 MyControl 是什么)。 -
@greg-449 我为 MyControl 添加了代码。正如我在原始问题中所说,是一个非常简单的界面,但我认为您是对的,代码可能会有所帮助
-
这对我来说仍然可以编译。
-
@greg-449 奇怪。你用过org.eclipse.swt.widgets.Control吗???这是创建主要问题的类。
标签: java generics events swt listener