允许在运行时更改对象类的位置

时间:2011-04-13 14:02:08

标签: oop class dynamic types runtime

您是否了解允许(支持)在运行时更改对象类的编程语言?

请举一个关于语法的简短示例。如果你知道的话,给一个用例。涉及鸭子打字的例子也很受欢迎,所以不要回避提及这些语言。

更新:我发现Smalltalk有changeClassTobecome。 CLOS可以change-class。我发现一篇文章建议使用这些机制来实现在运行时引用的“husk对象”,但只是在实际访问时从一些持久性构造,提供了一些相关对象的漂亮延迟加载。

3 个答案:

答案 0 :(得分:1)

我认为,你的意思是:

你有一个A类的对象。但你想把它当作B类的对象。

有一些结构可能:

  1. 如果B是A的子类,则可以将对象强制转换为B(但是应该将其创建为B,否则会产生意外(并且希望不需要)的结果)。

  2. 在某些语言中,您可以将任何内容投射到任何内容。如果你知道自己在做什么,那就太好了,否则就要为你脚上的几个洞做好准备。

  3. 你提到了鸭子。我没有实际经验。但据我所知,鸭子打字是这样的:“我需要一个支持方法X,Y和Z的对象。”在那种情况下,你不关心这门课程。你只是想让它嘎嘎叫,游泳,按你的命令行走。

答案 1 :(得分:0)

Give a usecase

???我希望你能就特定用例寻求解决方案。 改变对象的类型?我想“不。”

但是如果你想改变一部分对象的能力或行为,那么看看松散耦合! 例如,您的类包含File_Saver类型的成员。有一个公共setter接受File_Saver的任何实例,你可以注入File_Saver_XML,File_Saver_PDF,......

这并不常见,但是类中的任何处理都可以通过1-n松耦合处理程序完成,您可以从外部进行交换。

归结为你的问题:你需要一个包装器+一个setter。 : - )

答案 2 :(得分:0)

一段时间后回到案例中,我得出的结论是,如果你觉得需要改变一个对象类,你想要打字。