【问题标题】:Clojure proxy and @Override?Clojure 代理和@Override?
【发布时间】:2011-04-29 02:53:27
【问题描述】:

在 Java 中,当您想要覆盖某些内容时,有时会使用 @Override。如何在 Clojure 代理中做同样的事情?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    代理中的每个方法都应该覆盖超类方法或接口方法,因此与可以添加新方法的 Java 类的情况略有不同。因此,如果 Clojure 提供了一种将代理方法标记为覆盖的方法,那么所有有效的代理都会为每个方法提供该注解。

    不幸的是,Clojure 允许您在代理中定义一个不属于该代理覆盖的任何类或接口的方法。但是,该方法在正常使用中不可调用或访问。

    【讨论】:

    • 否:您不能确保使用代理覆盖现有方法,例如使用 java @Override 注释:(proxy [Object] [] (nonExistingBaseMethod [] "Foo"))
    • 评论正确,答案错误。 @Override 的目的是检查这样注释的方法实际上是否按预期覆盖现有方法,而不是意外声明一个新方法。 proxy 没有提供这样的保障。
    • 我编辑了我的答案以解释为什么 Clojure 没有注释(代理中的每个方法都有注释),并指出它不会阻止您定义没有注释的函数t 覆盖任何东西。
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2011-09-03
    相关资源
    最近更新 更多