小编Jon*_* WS的帖子

Java泛型:捕获无法应用于Object

我有Map一些(消息)处理程序的代码.我正在尝试使处理程序变得一致(如界面处理程序所示).如果没有泛型,处理程序都需要从Object转换到相应的类,这将是很好的避免(但一切正常).对于每个消息类(Foo下面),我有一个处理程序类.

如何将任何类型的Map映射到任何类型的处理程序并使用"just"进行/调用Object?(参数handleMessage(Object)不能限制)

见下面的MWE.

import java.util.*;
public class Logic
{   
    Map<Class<?>, Handler<?>> handlers = new HashMap<Class<?>, Handler<?>>();

    public void run()
    {   
        handlers.put(Foo.class, new FooHandler());
    }   

    public void handleMessage(Object msg)
    {   
        Handler<?> handler = handlers.get(msg.getClass());
        if (handler != null) {
            handler.execute(msg);
        }   
    }   

    private interface Handler<T>
    {   
        public void execute(T msg);
    }   

    private class FooHandler implements Handler<Foo>
    {   
        public void execute(Foo msg) {}
    }   

    private class Foo {}
}
Run Code Online (Sandbox Code Playgroud)

此代码生成:

Logic.java:16:在Logic.Handler中执行(捕获#x of?)无法应用> to(java.lang.Object)handler.execute(msg);

如何在保持Handler接口通用的同时修复它?

java generics

6
推荐指数
1
解决办法
8622
查看次数

标签 统计

generics ×1

java ×1