Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AspectJ:通知不适用于数组类型_Java_Aspectj - Fatal编程技术网

Java AspectJ:通知不适用于数组类型

Java AspectJ:通知不适用于数组类型,java,aspectj,Java,Aspectj,我基于一个类型定义了一个切入点,该类型在编译方面时不可用,但在编译代码时可用。 当我使用简单类型时,它可以正常工作,但当我使用数组时就不行了 看起来该类型正在被展平并被视为非数组类型(不应用于数组类型,而应用于非数组类型,与预期的正好相反) 简单复制 方面: public aspect Aspect { after() : call(public MaybeMissingClass MaybeMissingClass.*()) { System.out.print

我基于一个类型定义了一个切入点,该类型在编译方面时不可用,但在编译代码时可用。
当我使用简单类型时,它可以正常工作,但当我使用数组时就不行了

看起来该类型正在被展平并被视为非数组类型(不应用于数组类型,而应用于非数组类型,与预期的正好相反)

简单复制 方面:

public aspect Aspect {
    after() : call(public MaybeMissingClass MaybeMissingClass.*())
    {
        System.out.println("Aspect: MaybeMissingClass 1");
    }
    after() : call(public MaybeMissingClass[] MaybeMissingClass.*())
    {
        System.out.println("Aspect: MaybeMissingClass[] 2");
    }
}
类别:

// compile all together
//      java -cp aspectjtools.jar;aspectjrt.jar org.aspectj.tools.ajc.Main -source 1.6 Aspect.aj Main.java
// compile aspect without concrete class in CP and then compile class
//      java -cp aspectjtools.jar;aspectjrt.jar org.aspectj.tools.ajc.Main -source 1.6 Aspect.aj
//      java -cp aspectjtools.jar;aspectjrt.jar org.aspectj.tools.ajc.Main -source 1.6 -aspectpath . Main.java

// run
//      java -cp .;aspectjtools.jar;aspectjrt.jar Main

import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String[] args) throws Exception {
        System.out.println("hello from main");
        MaybeMissingClass.f1();
        MaybeMissingClass.f2();
    }
}

class MaybeMissingClass {
    public static MaybeMissingClass f1(){System.out.println("hello from MaybeMissingClass.f1");return null;}
    public static MaybeMissingClass[] f2(){System.out.println("hello from MaybeMissingClass.f2");return null;}
}
一起编译时的输出:

hello from main
hello from MaybeMissingClass.f1
Aspect: MaybeMissingClass 1
hello from MaybeMissingClass.f2
Aspect: MaybeMissingClass[] 2
单独编译方面时的输出:

hello from main
hello from MaybeMissingClass.f1
Aspect: MaybeMissingClass 1
Aspect: MaybeMissingClass[] 2
hello from MaybeMissingClass.f2
有人能解释一下吗

编辑
调用而不是
resolveBindingsForExactType()
时,维度信息似乎丢失了

但这并没有真正意义。这些信息在aspect编译时和weave时都可用,所以为什么要放弃它呢?

这是一个有趣的问题。我为您创建的目的是获得反馈,并希望在可能的情况下解决问题。也许这是一个边缘案例,没有被测试覆盖,也没有人注意到。