代码之家  ›  专栏  ›  技术社区  ›  Eli Finkel

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

  •  0
  • Eli Finkel  · 技术社区  · 4 年前


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

    简单复制

    方面:

    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
    

    有人能解释一下吗?

    编辑
    呼叫时维度信息似乎丢失 resolveBindingsForMissingType() 而不是 resolveBindingsForExactType() .

    0 回复  |  直到 4 年前