【发布时间】:2011-02-23 00:21:22
【问题描述】:
有没有办法从java代码层面直接给解析器和lexar指令?如果不是,那怎么可能做到这一点呢?
问题是我想让解析器评估一个变量,备份,然后将该变量的值分配为对象名称。像这样:
String s = "text";
SomeClass (s) = new SomeClass();
解析器读取--> 好的,s 评估为“文本”... 解析器回溯,同时将“text”保存在内存中,并将“text”指定为 SomeClass 的新实例的名称,因此现在可以这样做:
text.callSomeMethod();
我需要这样做,因为我必须实例化任意数量的 SomeClass 对象。每个人都必须有一个唯一的名称,最好是这样做:
while (someArbitrarySet.hasNext()) {
String s = "token" + Math.random();
SomeClass (s) = new SomeClass();
(s).callSomeMethod();
}
我希望这是有道理的......
【问题讨论】:
-
“每个人都必须有一个唯一的名称”——你真的是说每个人都必须绑定到源文本中的唯一标识符吗?为什么不把它们放在一个 Map 中,以“名称”为键呢?或者将名称设为 SomeClass 的字段?我认为你不需要你要求的重型火炮。
-
我的意思是:SomeClass s; SomeClass q;某类 p; s、q 和 p 都必须不同。我被告知只需将它们放在地图中,但这需要创建大量对象,其中许多对象可能永远不需要。虽然这并不总是一个问题,但我正在使用非常处理能力/磁盘 + RAM 受限的机器。
-
您要解决什么问题?也许有更好的选择。
-
在不涉及太多细节的情况下,我正在编写一个在更大程序中运行的应用程序。通常,在我处理完这些对象后,它们会被垃圾收集,但是更大的程序会维护它们,因此需要为每个对象指定一个唯一的名称。如果我不给每个对象一个唯一的名称,旧对象将被覆盖,但在更大的程序的上下文中仍然需要它。
-
我认为真正的问题是:为什么你认为你需要这样做?