【问题标题】:Exclude java.lang.Process from namespace从命名空间中排除 java.lang.Process
【发布时间】:2020-08-06 18:58:48
【问题描述】:

我有一个名为 Process 的记录。

执行以下操作

(ns foo)
(defrecord Process ...)

导致错误Process already refers to: class java.lang.Process in namespace: foo

另外,当我将Process 导入另一个命名空间时,我得到了同样的错误:

(ns bar
  (:import [foo Process]))

以下片段解决了我的问题,但感觉不干净。

(ns foo)
(ns-unmap *ns* 'Process)
(defrecord Process ...)

(ns bar
  (:import foo [.. ..]))
(ns-unmap *ns* 'Process)
(import [foo Process])

我想在ns 语句中排除java.lang.Process,这样我就不需要ns-unmap 或单独的import 表达式。

【问题讨论】:

  • Exclude java.lang in clojure namespace 密切相关,即使不是正确的重复。
  • 感谢您的快速回答。这似乎是几乎相同的问题,但也许自从 8 年前提出这个问题以来发生了一些变化?

标签: clojure


【解决方案1】:

您可以使用gen-class 创建您的类并按如下方式导入它。

(ns tes
  (:gen-class
    :name tes.Process
    :constructors {[] [String]}))

用法

(ns bar
  (:import [tes Process]))

(def process (Process .))
(prn :name process)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多