gpt4 book ai didi

java - Java 1.6.0_24 中 'unique' 的 OQL 'jhat' 函数出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:34 26 4
gpt4 key购买 nike

这是我第一个发布的问题。我有一个相当复杂的 OQL 查询,其中列出了包中加载的类的静态字段。我在针对 Java 1.6.0_24 的“jhat”运行查询时遇到的一个问题是“unique”函数无法按预期工作。我预计

select unique(['a', 'b', 'c', 'a'])

返回 ['a', 'b', 'c'] 但它返回 ['a'],wtf?

如果有人感兴趣,实际的完整查询是(将“com.mydomain”替换为您喜欢的内容):

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;

最佳答案

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

您有两个选择:

  1. 对跟踪对象进行唯一化,而不是其名称:

    map(unique(filter(map(referees(cl), classof), "it.name != ...")), "it.name")
  2. 指定要唯一化的“函数”,以便它适用于字符串:

    unique(['a', 'b', 'c', 'a'], 'it')

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

关于java - Java 1.6.0_24 中 'unique' 的 OQL 'jhat' 函数出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com