1
23
不,这是不可能的。泛型不如模板那么强大。例如,模板参数可以是用户定义的类型、基元类型或值;但是通用模板参数只能是
编辑:这是一个老的答案,因为2011我们有Java 7,它有 Annotations that can be used for such trickery . |
2
12
看一看 Clojure . 这是一个带有宏(元编程)的LISP,它运行在JVM上,与Java非常可互操作。 |
3
5
“静态元编程”到底是什么意思?是的,C++模板元编程在Java中是不可能的,但是它提供了比C++更强大的其他方法:
没有最好的方法:每种方法都有其优点和缺点。 由于JVM的灵活性,Java中的所有这些方法都可以在编译时和运行时使用。 |
4
3
不。更重要的是,编译器会将泛型类型擦除到其上限,因此您无法在运行时创建泛型类型T的新实例。
在Java中进行元编程的最好方法是绕过类型擦除并提交。
|
5
2
不,Java中的泛型纯粹是避免对象的投射的一种方式。 |
6
2
如果您需要强大的Java编译时逻辑,一种方法是使用某种代码生成。正如其他海报所指出的,Java语言不提供任何适合编译时间逻辑的特性,这可能是你最好的选择(如果你真的需要编译时逻辑)。一旦你用尽了其他的可能性 当然 如果您想生成代码,您可能会对我的开源项目rjava感兴趣,请访问: http://www.github.com/blak3mill3r 它是在Ruby中编写的Java代码生成库,我为Ruby on Rails应用程序自动生成谷歌Web工具包接口。事实证明,这样做非常方便。 作为一个警告,调试RJava代码可能非常困难,RJava不做太多的检查,它只是假设您知道自己在做什么。这几乎就是静态元编程的状态。我认为调试比用C++ TMP做的任何事情都要容易得多,而且可以用它来做同样的事情。 不管怎样,如果你正在考虑编写一个输出Java源代码的程序,立即停止并检查Rjava。它可能还没有达到你想要的效果,但是它是麻省理工学院的许可证,所以你可以随意改进它,油炸它,或者卖给你的奶奶。我很高兴有其他的开发人员有经验的通用编程,以评论设计。 |
7
1
|
8
1
Lombok 提供了一种弱形式的编译时元编程。然而,他们使用的技术是 completely general . 见 Java code transform at compile time 进行相关讨论 |
9
0
我不确定我是否理解静态元编程的优点。 在爪哇,你可以思考找到关于你的类的信息,并做所有元编程所能做的事情,你只需在代码中完成它们,而不需要添加新的语法和不同的思维方式。注释还能够以更结构化的方式执行某些元编程任务。 我可能错了,我正在认真考虑打开一个关于它的问题,因为我不确定我是否明白。看起来静态的元编程是一个整洁的黑客,它可以理解一些语言在运行时不具备很多编译时间信息(Java和动态语言的强项之一)。 如果有人能用一个链接来回复这样一个例子,在这个例子中,元编程提供了一个比反射更易于理解、更可读或更好的解决方案,我会感谢这一努力。 |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
chenyuandong · Elixir中的元编程 6 年前 |
Marcos Felipe · 基于存储的变量进行比较 6 年前 |
TheDelChop · 动态定义对象#为Ruby类初始化 6 年前 |
Mathieu Van Nevel · 将结构拆分为元组[重复] 6 年前 |
Jonathan Mee · 如何防止为未实现方法的对象生成模板 6 年前 |
spring cc · 如何在python元编程中使用实例方法? 6 年前 |