从Void转换,在Map中存储任何类型

时间:2010-11-13 20:30:11

标签: java casting void

我想在Map中存储不同类型:

public Map< String, Void > common;
MyClass object = new MyClass();
common.put( "Object1", object );

然后像这样使用它:

Void object = common.get( "Object1" );
( ( MyClass )object ).runAnyFunction();

这只有在我创建自己的名为Void的空类并且扩展我将放入Map with Void的所有类时才有效。所以问题解决了,除非......

Java中是否已存在Void?如果我不创建自己的Void类仍然有效。直到我进入我尝试.runAnyFunction()的演员。也许如果我试图用Void扩展我的类 - 但这只适用于我创建的Void,而不是Java的Void。

如果我真的需要创建自己的空Void类,那真的归结为。或者,如果我可以使用Java自己的Void?

2 个答案:

答案 0 :(得分:6)

为什么不使用Object?所有Java类都是Object的直接或间接子类。

public Map< String, Object > common;

答案 1 :(得分:1)

我很抱歉提出这个问题,但为什么要使用这个解决方案?我认为每次你想要将一种类型转换为另一种类型时,你应该停下来再考虑一下你的设计。

真的,你想执行方法“runAnyFunction()”。如何创建界面

public interface Runner {     public void runAnyFunction();

}

现在将地图定义为地图。

然后你可以说map.get(“foo”)。runAnyFunction()而没有任何强制转换。

您可以根据需要创建Runner的实现。这称为多态,通常是面向对象的设计。

下一步可能是重用一个现有接口,例如:可运行或可调用。

我甚至写过一篇关于现有界面使用的简短文章:http://java.dzone.com/articles/useful-abuse