这是注释:
@Target(value = ElementType.TYPE)
@Retention(value = RetentionPolicy.RUNTIME)
@Inherited
public @interface MyAnnotation {
String name();
}
Run Code Online (Sandbox Code Playgroud)
这是一个带注释的类:
@MyAnnotation(name="foo")
public class ClassA {
public ClassA() {
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
这是第二个带注释的类:
@MyAnnotation(name="bar")
public class ClassB {
public ClassB(String aString) {
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个aspectj切入点,正确匹配ClassA和ClassB的构造函数,而不匹配任何其他未注释的类的构造函数MyAnnotation.
我有兴趣知道为什么visualvm OQL在以下语句中有问题:
select filter(heap.objects("java.util.HashMap"), isTrue(it));
function isTrue(object) {
return true;
}
Run Code Online (Sandbox Code Playgroud)
例外情况是:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "it" is not defined. (#1)
Run Code Online (Sandbox Code Playgroud)
相比之下,visualvm OQL在以下任何示例中都没有问题:
示例1(注意"它"未引用):
select filter(heap.objects("java.util.HashMap"),
function(it) {
return true;
});
Run Code Online (Sandbox Code Playgroud)
示例2(注意"它"被引用):
select filter(heap.objects("java.util.HashMap"), isTrue("it"));
function isTrue(object) {
if (object instanceof String) {
throw "String passed!";
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
示例3("函数(it)"由于某种原因在OQL中专门处理?):
select filter(heap.objects("java.util.HashMap"), function(it) { return isTrue(it); });
function isTrue(object) {
return true;
}
Run Code Online (Sandbox Code Playgroud)
我问这个是因为它看起来不直观,非直观行为的变化出乎意料地出现,当我试图创造可用的东西时,我放慢了速度.