Java等价于typeof(SomeClass)

时间:2011-05-30 20:53:23

标签: java generics

我尝试实现

Hashtable<string, -Typeof one Class-> 
在Java中

。但我不知道如何让这个工作。我试过了

Hashtable<String, AbstractRestCommand.class>

但这似乎是错误的。

顺便说一下。我希望这能在运行时为每个反射创建一个类的新实例。

所以我的问题是,如何做这种事情。

编辑:

我有抽象类“AbstractRestCommand”。现在我想用这样的许多命令创建一个Hashtable:

        Commands.put("PUT",  -PutCommand-);
    Commands.put("DELETE", -DeleteCommand-);

其中PutCommand和DeleteCommand扩展了AbstractRestCommand,以便我可以使用

创建一个新实例
String com = "PUT"
AbstractRestCommand command = Commands[com].forName().newInstance();
...

4 个答案:

答案 0 :(得分:4)

您想创建字符串到类的映射吗?这可以这样做:

Map<String, Class<?>> map = new HashMap<String, Class<?>>();
map.put("foo", AbstractRestCommand.class);

如果要限制将可能的类型限制为某个接口或公共超类,可以使用有界通配符,以后可以使用映射的类对象创建该类型的对象:

Map<String, Class<? extends AbstractRestCommand>> map =
                    new HashMap<String, Class<? extends AbstractRestCommand>>();
map.put("PUT", PutCommand.class);
map.put("DELETE", DeleteCommand.class);
...
Class<? extends AbstractRestCommand> cmdType = map.get(cmdName);
if(cmdType != null)
{
    AbstractRestCommand command = cmdType.newInstance();
    if(command != null)
        command.execute();
}

答案 1 :(得分:1)

我认为你的意思是:

Hashtable<String, ? extends AbstractRestCommand>

答案 2 :(得分:1)

尝试:

Hashtable<string, Object>

编辑:

阅读完编辑后,您可以这样做:

Hashtable<String, AbstractRestCommand>

答案 3 :(得分:1)

当然你只需要

Hashtable<String, AbstractRestCommand>