代码之家  ›  专栏  ›  技术社区  ›  Espen

从虚空中铸造,在地图中存储任何类型

  •  1
  • Espen  · 技术社区  · 14 年前

    我想在这样的地图中存储不同的类型:

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

    然后像这样使用:

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

    只有当我创建了自己的名为Void的空类并扩展了我将用Void放在映射中的所有类时,这才有效。所以问题解决了,除非。。。

    Java中不是已经存在一个空白吗?如果我不创建自己的空类仍然有效。直到我找到我想要的角色。也许如果我试图用Void扩展我的类——但这只适用于我创建的Void,而不是Java的Void。

    这实际上取决于我是否真的需要创建自己的空空类。或者如果我可以使用Java自己的Void?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Alexis Dufrenoy    14 年前

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

    public Map< String, Object > common;
    
        2
  •  1
  •   AlexR    14 年前

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

    实际上,您想要执行方法“runAnyFunction()”。如何创建接口

    公共接口运行程序{ public void runAnyFunction();

    }

    现在把你的地图定义为地图。

    然后可以说map.get(“foo”).runAnyFunction()而不使用任何强制转换。

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

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

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