문제

이것은 첫 번째 게시 된 질문입니다.우리 패키지에로드 된 클래스의 정적 필드를 나열하는 상당히 복잡한 OQL 쿼리가 있습니다.Java 1.6.0_24의 'JHAT'에 대한 쿼리를 실행하는 것으로보고있는 한 가지 문제는 '고유 한'함수가 예상대로 작동하지 않는다는 것입니다.나는 를 기대한다

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에서 비 띄지 않습니다.따라서 마지막 문자열 만 유지됩니다 (모든 문자열은 고유 한 objectid 값이 있으므로).

두 가지 옵션이 있습니다.

  1. 추적 된 물체에서 이름이 아니라,

    map(unique(filter(map(referees(cl), classof), "it.name != ...")), "it.name")
    

  2. uncilify를 사용하여 "기능"을 지정하여 문자열에 대해 작동합니다.

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

    문자열 자체가 불일치하게 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top