- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个需要对不同的自定义事件和监听器使用react的程序。
我试图使用泛型来缩短它,事实是,我不明白我的错误在哪里。
这是我的代码:
听众和事件:
public interface MyFirstListener extends EventListener {
void firstRequest(String text);
}
public interface MySecondListener extends EventListener {
void secondRequest(String text);
}
public class MyEvent extends EventObject {
private String text = null;
public MyEvent(Object source, String text) {
super(source);
this.text = text;
}
public String getText() {
return text;
}
}
public class MyProblem {
private EventListenerList listenerList = new EventListenerList();
public MyProblem() {}
public <T extends EventListener> void addListener(T listener) {
listenerList.add(T.class, listener); // Here I have : Illegal class literal for the type parameter T
}
public <T extends EventListener> void removeListener(T listener) {
listenerList.remove(T.class, listener); // Here I have : Illegal class literal for the type parameter T
}
void fireFirstRequestEvent(MyEvent evt) {
for (MyFirstListener listener : listenerList.getListeners(MyFirstListener.class)) {
listener.firstRequest(evt.getText());
}
}
void fireSecondRequestEvent(MyEvent evt) {
for (MySecondListener listener : listenerList.getListeners(MySecondListener.class)) {
listener.secondRequest(evt.getText());
}
}
public static void main(String[] args) {
FirstClass first = new FirstClass();
SecondClass second = new SecondClass();
MyProblem problem = new MyProblem();
problem.addListener(first);
problem.addListener(second);
}
}
class FirstClass implements MyFirstListener {
@Override
public void firstRequest(String text) {
// Do Something
}
}
class SecondClass implements MySecondListener {
@Override
public void secondRequest(String text) {
// Do Something
}
}
listenerList.add(listener.getClass(), listener); // Here I have : The method add(Class<T>, T) in the type EventListenerList is not applicable for the arguments (Class<capture#1-of ? extends EventListener>, T)
最佳答案
通常,您只需为每个监听器类型声明两种方法:
public void addFirstListener(MyFirstListener listener) {
listenerList.add(MyFirstListener.class, listener);
}
public void removeFirstListener(MyFirstListener listener) {
listenerList.remove(MyFirstListener.class, listener);
}
MyFirstListener.class
和
MySecondListener.class
:
private final static List<Class<? extends EventListener>> SUPPORTED_LISTENER_TYPES
= Arrays.asList(MyFirstListener.class, MySecondListener.class);
private Class<? extends EventListener> getListenerType(EventListener listener){
for(Class<? extends EventListener> listenerType : SUPPORTED_LISTENER_TYPES){
if(listenerType.isAssignableFrom(listener.getClass())){
return listenerType;
}
}
return null;
}
addListener
中使用此方法和
removeListener
方法:
@SuppressWarnings("unchecked")
public void addListener(EventListener listener) {
if(listener == null){
return;
}
Class<? extends EventListener> listenerType = getListenerType(listener);
if(listenerType == null){
throw new IllegalArgumentException("Listener " + listener + " not supported");
}
listenerList.add((Class<EventListener>)getListenerType(listener), listener);
}
listener
保证是
getListenerType()
返回的类型的后代.
关于java - Java 中的通用 addListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397867/
我是 JavaFX 的新手,我需要绑定(bind) Label 的可见属性,如果它表示的值达到 0,Label > 应该是不可见的。此外,当有界 integerProperty 值发生变化时,它也需要
过去,我还使用了一个调整大小监听器,将 requestAnimationFrame 与它捆绑在一起,作为轮询调整大小事件的某种优化版本: /** * Resize listener * @retu
尝试此操作时出现错误“.addListener 不是函数”: if(document.getElementById("id")){ document.getElementById("id").a
我正在尝试制作 chrome 扩展,但我无法运行我的代码。 这是 list { "name": "My First Extension", "version": "1.0", "d
我正在尝试在行和数据点之间构建一个事件处理程序。我当前收到错误: TypeError: line.getSelection is not a function. 我不太确定如何添加此功能或者我可能会出
我有一个 Chrome 扩展程序和一个简单的网页一起运行。我向扩展程序发送一条消息,此时扩展程序会执行一些异步操作。下面的代码不起作用,因为 sendMessage 上的回调在我的 promise 解
我正在尝试重现 Google map 的 addListener,但使用用于点击、按键等的 jQuery 监听器除外。 在 Moogle map 中,您可以编写 .event.addListener(
我尝试为 ListView 生成一个监听器,该监听器获取存储在所选项目中的字符串,获取它的整数,然后调用一个方法。然而我不断收到 Error:(37, 67) java: no suitable me
我在一个项目中使用谷歌地图,我想在 map 上显示一些可点击的标记,每个标记都显示一个包含不同数据的 Div,所以我通过从数据库中获取数据来开始我的代码并工作好吧,然后我像这样在 map 上显示它:
我的问题如下:GEvent.addListener(map, "click"function(){...}) 在回调函数中返回了什么?我根本没有在 GMaps 引用中找到任何信息,你能给我一些吗?我唯
我正在开发一个需要对不同的自定义事件和监听器使用react的程序。 我试图使用泛型来缩短它,事实是,我不明白我的错误在哪里。 这是我的代码: 听众和事件: public interface MyFir
我相信这个问题之前已经有人问过,但似乎我有点倒霉才找到它。我的问题是如何在过程中间启用按钮/ Actor 的 addListener?例如,在 Activity 屏幕之间的 Assets 加载屏幕上(
我有可变数量的文本字段,我正在动态初始化 Google map 自动完成功能。 问题是每次触发 place_changed 事件时,我都需要确切地知道它是在哪个输入框上触发的。如何将此数据传递到我的
我正在使用如下 JavaScript 函数:- function fileSelectHandler(e) { fileDragHover(e); // some more code
在下面的 HTML 代码中,我希望在 map 更改(例如缩放、拖动、单击)时收到警报。 该警报将来将更改为在拖动、缩放或单击时显示 Angular 坐标。然后,“获取 Angular 落”按钮将被省略
我希望能够从内容脚本(任何选项卡)与后台进行通信。 根据文档,我应该使用 chrome.extension chrome.runtime.onMessage与chrome.runtime.sendMe
我有一个单独的谷歌地图v3代码。只是为了当我点击它时在我的 google fusion kml 层中显示 infowindow 信息框。昨天我的代码工作正常。我没有做任何改变。但今天我的 addLis
这个问题已经有答案了: JavaScript closure inside loops – simple practical example (45 个回答) 已关闭 6 年前。 这是我的代码: fu
我知道在类组件中我们以这种方式使用 addListener: const Animated.Value= new Animated.Value(0); Animated.Value.addListen
我正在尝试测试我的 Ant 申请 react 测试库 ,但我不断收到此错误: TypeError: Cannot read property 'addListener' of undefined 我使
我是一名优秀的程序员,十分优秀!