我想在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?
答案 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