首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 1.6.0_24中“jhat”的OQL“唯一”函数的问题

Java 1.6.0_24中“jhat”的OQL“唯一”函数的问题
EN

Stack Overflow用户
提问于 2011-05-17 02:35:57
回答 1查看 323关注 0票数 1

这是我发布的第一个问题。我有一个相当复杂的OQL查询,它列出了我们包中加载的类的静态字段。我看到的一个问题是,在对Java的'jhat‘运行查询时,’1.6.0_24‘函数并没有像预期的那样工作。我希望

代码语言:javascript
复制
select unique(['a', 'b', 'c', 'a'])

返回'a','b','c‘,而不是返回'a',wtf?

如果任何人感兴趣,实际的完整查询是(将'com.mydomain‘替换为您喜欢的):

代码语言:javascript
复制
select cl.name + ' -- ' + unique(map(filter(referees(cl), "classof(it).name != 'java.lang.Class' && classof(it).name != 'java.lang.String' && classof(it).name != 'sun.misc.Launcher$AppClassLoader' && classof(it).name != 'java.security.ProtectionDomain' && classof(it).name != '[Ljava.security.cert.Certificate;' && classof(it).name != 'sun.plugin2.applet.JNLP2ClassLoader'"), "classof(it).name")).join(', ')
from instanceof java.lang.Class cl
where /com.mydomain./(cl.name) && ! /com.mydomain.xs.protobuf./(cl.name)
&& length(filter(referees(cl), "classof(it).name != 'java.lang.Class' && classof(it).name != 'java.lang.String' && classof(it).name != 'sun.misc.Launcher$AppClassLoader' && classof(it).name != 'java.security.ProtectionDomain'")) > 0;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-17 04:25:06

默认情况下,unique在对象的objectid上唯一,这适用于实际跟踪的对象,但对于字符串,它返回null。因此,只保留最后一个字符串(因为所有字符串的objectid值都不是唯一的)。

您有两个选择:

  1. 统一跟踪对象,而不是它们的名称:

map(unique( "it.name")

  • Specify (map(referees(Cl),classof),"it.name != ...")),过滤要唯一的“函数”,以便对字符串起作用:

唯一( 'a','b','c',‘a’,'it')

这将导致字符串本身是唯一的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6021781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档