通用接口:
public interface Matcher<T> {
public double getScore(T value1, T value2);
}
Run Code Online (Sandbox Code Playgroud)
两个实施类:
public StringMatcher implements Matcher<String> {
public double getScore(String value1, String value2) {...}
}
public DateMatcher implements Matcher<Date> {
public double getScore(Date value1, Date value2) {...}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好.更换T用String或者Date是没有问题的.调用getScore()如下方法也有效:
Matcher<String> matcher = new StringMatcher();
matcher.getScore("hello", "world");
Run Code Online (Sandbox Code Playgroud)
当我有一个List未知的Matcher并且我想使用该getScore()方法时,问题就开始了.
public void test() {
List<Matcher<?>> list = new ArrayList<Matcher<?>>();
list.add(new StringMatcher());
list.add(new DateMatcher());
for (Matcher<?> matcher : list) …Run Code Online (Sandbox Code Playgroud) 我有一个用于应用程序的UserControl和一个文本框.当按下此文本框中的Enter键时,应该激活一个按钮(基本上按下"确定"按Enter键而不是用鼠标手动单击按钮).
所以我在我的文本框中添加了一个KeyDown事件并实现了以下代码:
private void txtSearchID_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter && !txtSearchID.Text.Equals(string.Empty))
{
button_Click(null, null);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我想测试时,按Enter键时没有发生任何事情.除此之外,奇怪的是,当按Enter键时,事件甚至不会被触发,而是每隔一个键.我错过了什么吗?