Java中是否可以进行静态元编程?

我是C ++中静态元编程的粉丝。我知道Java现在有泛型。这是否意味着在Java中可以实现静态元编程(即编译时程序执行)?如果是这样,任何人都可以推荐任何可以了解更多资源的好资源吗?     
已邀请:
不,这是不可能的。泛型不如模板强大。例如,模板参数可以是用户定义的类型,基元类型或值;但通用模板参数只能是
Object
或其子类型。 编辑:这是一个老答案;自2011年以来,我们拥有Java 7,它具有可用于此类技巧的Annotations。     
看看Clojure。它是一个带有宏的LISP(元编程),它运行在JVM上,并且与Java非常互操作。     
“静态元编程”是什么意思?是的,C ++模板元编程在Java中是不可能的,但它提供了其他方法,比C ++中的方法更强大: 反射 面向方面的编程(@AspectJ) 字节码操作(Javassist,ObjectWeb ASM,Java代理) 代码生成(注释处理工具,Velocity等模板引擎) 抽象语法树操作(由流行的IDE提供的API) 即使在运行时也可以运行Java编译器并使用已编译的代码 没有最好的方法:每种方法都有其优点和缺点。 由于JVM的灵活性,Java中的所有这些方法都可以在编译时和运行时使用。     
否则,泛型类型会被编译器擦除到其上限,因此您无法在运行时创建泛型类型T的新实例。 在Java中进行元编程的最佳方法是绕过类型擦除并交出类型T的
Class<T>
对象。但是,这只是一个黑客攻击。     
不,Java中的泛型纯粹是一种避免使用Object的方法。     
如果您需要强大的Java编译时逻辑,那么一种方法是使用某种代码生成。因为,正如其他海报所指出的那样,Java语言没有提供任何适合编译时逻辑的功能,这可能是你最好的选择(如果你确实需要编译时逻辑)。一旦你已经用尽其他可能性并且你确定要进行代码生成,你可能会对我的开源项目Rjava感兴趣,可以在以下位置获得: http://www.github.com/blak3mill3r 它是一个用Ruby编写的Java代码生成库,我编写这个库是为了自动为Ruby on Rails应用程序生成Google Web Toolkit接口。事实证明它非常方便。 作为警告,调试Rjava代码非常困难,Rjava没有做太多检查,它只是假设你知道你正在做什么。无论如何,这几乎就是静态元编程的状态。我说它比使用C ++ TMP做的任何非常重要的事情都要容易得多,并且可以将它用于同类事情。 无论如何,如果您正在考虑编写一个输出Java源代码的程序,请立即停止并查看Rjava。它可能不会做你想要的,但它是麻省理工学院的许可,所以随时改进它,炸它,或卖给你的奶奶。我很高兴有其他有通用编程经验的开发人员对设计发表评论。     
在一个非常简单的意义上,也许? http://michid.wordpress.com/2008/08/13/type-safe-builder-pattern-in-java/     
Lombok提供了一种弱形式的编译时元编程。但是,他们使用的技术是完全一般的。 有关讨论,请参阅编译时的Java代码转换     
我不确定我理解静态元编程的优势。 在Java中,您可以反思以查找有关您的类的信息并完成元编程所做的所有事情,您只需在代码中执行它们,而无需添加新语法和不同的思维方式。注释还能够以更结构化的方式执行某些元编程任务。 我可能错了,我正在认真考虑在上面提出一个问题,因为我不确定我是否得到了它。似乎静态元编程是一个巧妙的黑客,可以解决这样一个事实,即某些语言在运行时不能保留大量的编译时信息(Java和动态语言的优势之一)。 如果有人可以回复一个链接到一个示例,其中元编程提供了比反射更容易理解,可读或更好的解决方案,我会很感激。     

要回复问题请先登录注册