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

有没有办法以编程方式创建java类类型?,java,clojure,Java,Clojure,是否有一种使用反射以编程方式创建类的方法?例如。是否有一个私有构造函数可以用来创建类类型,然后可以用来创建该类的实例 我知道还有其他一些技巧,比如生成源代码并编译,或者生成字节码并使用类加载器加载。。。但我想看看是否有可能以某种方式直接创建java.lang.Class的实例 我想用clojure编写以下代码: (def c (create-class "com.example.Dog" {:fields {"legs" 4}

是否有一种使用反射以编程方式创建类的方法?例如。是否有一个私有构造函数可以用来创建类类型,然后可以用来创建该类的实例

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

我想用clojure编写以下代码:

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

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

Clojure有几种根据您的需要生成类的方法:在中介绍了它们,尽管我发现关于类型的一章对于比较动态生成类的各种方法非常有用

  • 解除记录
  • deftype
  • 代理
  • gen类
  • 协议
  • 具体化

在引擎盖下,它们生成字节码并使用类加载器(gen类除外)加载它,该加载器编写类文件。这方面的内容比我在这里介绍的要多得多,值得一看Clojure编程(或您最喜欢的Clojure书籍)中的章节

Clojure根据您的需要提供了几种生成类的方法:虽然我发现关于类型的一章对于比较动态生成类的各种方法非常有用,但在中对它们进行了描述

  • 解除记录
  • deftype
  • 代理
  • gen类
  • 协议
  • 具体化

在引擎盖下,它们生成字节码并使用类加载器(gen类除外)加载它,该加载器编写类文件。这个主题的内容比我在这里所能涵盖的要多得多,很值得一看Clojure编程(或您最喜欢的Clojure书籍)中的章节。

这里真的不清楚您在问什么。你能提供更多的细节吗?你的问题中Clojure的部分在哪里?为了澄清,你在问一种使用反射定义新的
(而不是创建现有类的新对象)的方法?如果你在谈论Clojure,
defrecord
deftype
为新命名类发出字节码。@gus。是的,这就是我想做的。我知道clojure发出字节码来创建一个类,但我希望能够使用反射。我用clojure标记了这个问题,因为我更偏爱clojure,希望引起clojure用户的注意。现在还不清楚你在问什么。你能提供更多的细节吗?你的问题中Clojure的部分在哪里?为了澄清,你在问一种使用反射定义新的
(而不是创建现有类的新对象)的方法?如果你在谈论Clojure,
defrecord
deftype
为新命名类发出字节码。@gus。是的,这就是我想做的。我知道clojure发出字节码来创建一个类,但我希望能够使用反射。我用clojure标记了这个问题,因为我更偏爱clojure,希望抓住clojure用户的注意力。有没有一种方法不用通过类加载器就能做到这一点?黑客?将类放入jvm的唯一方法是通过类加载器。每次创建函数时都会使用类加载器,也许这里的混淆与clojure运行时在内部使用类加载器有关?使用clojure生成命名的java类等,您不需要了解任何有关它们的信息。有没有一种方法可以不用通过类加载器就可以做到这一点?黑客?将类放入jvm的唯一方法是通过类加载器。每次创建函数时都会使用类加载器,也许这里的混淆与clojure运行时在内部使用类加载器有关?使用clojure生成命名java类等,您不需要了解任何有关它们的信息。