【发布时间】:2011-05-27 10:42:03
【问题描述】:
查看Java VM specification 后,我注意到不仅仅是ASCII 字母可以用来创建标识符。
首先,我想知道是否有任何额外的符号(除了$,可用于标识符)
您认为使用扩展字符集来编码标识符中的附加信息和自定义类加载器是否有可能实现真正的 Java 泛型?
当然,您必须绕过类型擦除,但这可以通过自定义解析器实现吗?
因此,您可以以如下格式存储通用名称:$g$GenericList$_Java_lang_String$
我在这里使用GenericList,因为我不打算修改原始实现!
使用类加载器加载它们,创建一个合适的GenericList<String> 版本并将其发回。
编辑:我计划将它用于我在 JVM 上构建的语言。由于它使用$'s 和_'s 作为特殊字符,这样的编码信息可能会起作用!
编辑 2: 我想更难的事情是泛型方法?有没有人知道如何实施这些信息?
编辑 3: 由于只有在类加载器消失时才能卸载类,所以我是否能够像在 .Net 中那样缓存和删除已解析的模板,还是像 C++ 那样做?
【问题讨论】:
-
+1,有趣的想法。请务必查看 .NET IL,它使用类似的概念来实现没有类型擦除的泛型(其中,字符 `(反引号)用于分隔标识符中的泛型参数)。
-
其实我一直在研究Rotor (SSCIL),非常非常有趣。我的问题更多的是如何实现每个通用实例的缓存和生存时间
标签: java templates generics classloader