有没有办法以编程方式创建java类类型?

时间:2014-01-28 19:14:56

标签: java clojure

有没有办法使用反射以编程方式创建一个类?例如。我们可以使用私有构造函数来创建一个类类型,然后可以用它来创建该类的实例吗?

我知道还有其他一些技巧,例如生成源代码并编译它,或生成字节代码并使用类加载器加载它......但我想看看是否有可能以某种方式创建java.lang的实例。直接上课。

我想在clojure中编写以下代码:

(def c (create-class "com.example.Dog" {:fields {"legs" 4}
                                        :methods {"bark" (... do something ...)}
                                        :constructors {.....}}))

(def d1 (.newInstance c))
(def d2 (.newInstance c))

1 个答案:

答案 0 :(得分:4)

Clojure有几种方法可以根据你的需要生成类:Clojure types page中描述了它们虽然我发现Clojure Programming中关于类型的章节最有用,作为生成类的各种方法的比较动态。

  • defrecord
  • DEFTYPE
  • 代理
  • 根级
  • 协议
  • 具体化

在引擎盖下,这些生成字节码并使用类编译器(gen-class除外)加载它,该类加载器写入类文件。这个主题还有很多内容,我可以在这里讨论,非常值得查看Clojure Programming(或你最喜欢的Clojure书)中的章节