1

我想像这样在 Map 中存储不同的类型:

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

然后像这样使用它:

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

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

Java中不是已经有一个Void了吗?如果我不创建自己的 Void 类仍然有效。直到我到达我尝试.runAnyFunction() 的演员表。也许如果我尝试使用 Void 扩展我的类 - 但这仅适用于我创建的 Void,而不适用于 Java 的 Void。

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

4

2 回答 2

6

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

public Map< String, Object > common;
于 2010-11-13T20:34:53.073 回答
1

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

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

公共接口亚军 { 公共无效 runAnyFunction();

}

现在将您的地图定义为地图。

那么你可以说 map.get("foo").runAnyFunction() 没有任何强制转换。

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

下一步可能是重用现有接口之一,例如 Runnable 或 Callable。

我什至写了一篇关于现有接口的这种用法的短文:http: //java.dzone.com/articles/useful-abuse

于 2010-11-13T22:36:09.207 回答