我正在研究消息解析器/生成器子系统.我正在创建一个自动生成器,它使用包含有关此协议的所有信息的数据库,包括枚举列表,以生成代码.我遇到的一件事是需要分层枚举.
更新
(我试图通过不描述完整的问题来简化事情,但下面的评论显然我错误地简化了太多.)
正在使用的数据库将存储为简化字符串(客户决策),但协议仅说"字节三元组"(又名Hierarchical Enum).完整的问题可以这样描述:
给定一组唯一的字符串,其各自对应一个独特的三重的,1)找到任何给定的字符串三重,和 2)找到任何给定的三元组的字符串.确保考虑"Undefined"和"No Statement"枚举(没有与之关联的字符串).[正如一张海报所说,是的,这是疯了.]
(警告:我已经做了十多年的C++,但去年我一直在做Java - 我的C++可能已"损坏"了.)
因此,使用一个公认的人为例子,给出:
// There is only one category
// POP= "P", COUNTRY= "K", CLASSICAL= "C"
enum Category {POP, COUNTRY, CLASSICAL};
// There is one Type enum for each Category.
// ROCK= "R", BIG_BAND = "B", COUNTRY_POP= "C"
enum PopType {ROCK, BIG_BAND, COUNTRY_POP};
enum CountryType {CLASSICAL_COUNTRY, MODERN_COUNTRY, BLUEGRASS, COUNTRY_AND_WESTERN};
// ...
// There is one Subtype for each Type
// EIGHTIES= "E", HEAVY_METAL= "H", SOFT_ROCK= "S" …Run Code Online (Sandbox Code Playgroud) 我试图找出一些非常奇怪的Java行为.我有一个涉及double的公式,但是"保证"给出一个整数答案 - 具体来说,是一个无符号的32位整数(唉,Java不能很好).不幸的是,我的答案有时不正确.
最后,我发现了问题,但其行为仍非常奇怪的对我说:一double,直接投给一个int似乎在被加盖MAX_INT了一个有符号整数,而double要转换成long被然后转换为一个int给了我预期的应答( -1;无符号32位整数的MAX INT,表示为带符号的32位整数).
我写了一个小测试程序:
public static void main(String[] args) {
// This is the Max Int for a 32-bit unsigned integer
double maxUIntAsDouble = 4294967295.00;
long maxUintFromDoubleAsLong = (long)maxUIntAsDouble;
long maxUintFromDoubleAsInt = (int)maxUIntAsDouble;
int formulaTest = (int) (maxUintFromDoubleAsLong * 1.0);
int testFormulaeWithDoubleCast = (int)((long) (maxUintFromDoubleAsLong * 1.0));
// This is a more-or-less random "big number"
long longUnderTest = 4123456789L;
// Max …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用命令行Ant 编译一个非常大的多项目Android项目.我最初使用Ant 1.8.3,但后来升级到1.8.4(结果是徒劳).虽然我安装了Eclipse(Indigo,今天更新),但是这个项目的性质阻止了在Eclipse中使用Ant.
代码似乎生成正常,但当它到达操作的"dex"阶段时,它会得到两个错误之一,具体取决于我ANT_OPTS:"GC Overhead Limit Exceeded"或"Java Heap Space".
我用Google搜索并检查了Stack.发现各个环节后(参见这里,这里,该协议栈的问题,而这个问题堆栈,以及),我修改了蚂蚁的选择.(许多链接涵盖了在执行Java代码时发生的情况;我的问题实际上是在Ant进程中创建Android APK以进行上载).
我的ANT_OPTS环境变量目前是:
-Xms4g -Xmx4g -Xmn256m -XX:PermSize=256m -XX:MaxPermSize=1024m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=8
Run Code Online (Sandbox Code Playgroud)
我尝试完全关闭GC Overhead Limit -XX:-UseGCOverheadLimit
,但所有这一切都是给我一个Java Heap Space错误而不是GC Overhead Limit错误.我曾经问过我的同事,但他们也没有想法.
哦,还有一个"细节":我可以使用Eclipse来编译和加载项目,这看起来似乎"很好"; 然而,这个"元项目"所需的大量项目表明我试图让Ant脚本工作.
系统信息:
我还能做些什么吗?另一个要搜索的关键字?别的地方看?