kotlin作为springcloud开发语言的反射问题


#1

在springcloud整合的许多中间件上,核心功能都是采用动态代理反射来实现的,会出现一些其奇奇怪怪的反射问题,其中阿里的sentinel中间件指定的的熔断方法始终都无法正常执行,sentinel要求的是静态方法,我也是在伴生对象设置了JvmStatic注解,但还是出现了反射错误。


#2

贴代码


#3


#4

原生java这样配置就没问题


#5

看了下,生成的字节码等价于以下 Java 代码

public final class FallBackService {
   @NotNull
   public static final FallBackService.Companion Companion = new FallBackService.Companion((DefaultConstructorMarker)null);

   @JvmStatic
   @NotNull
   public static final String port(@NotNull BlockException b) {
      return Companion.port(b);
   }

   public static final class Companion {
      @JvmStatic
      @NotNull
      public final String port(@NotNull BlockException b) {
         Intrinsics.checkParameterIsNotNull(b, "b");
         return "Failed";
      }

      private Companion() {
      }

      // $FF: synthetic method
      public Companion(DefaultConstructorMarker $constructor_marker) {
         this();
      }
   }
}

我看到有 AOP,是不是有字节码编辑操作,不知道是不是会受 final 影响,加上 allopen 插件试试?


#6

这个和openall没关系


#7

这边已经解决了 换做object就没问题


#8

反编译成java字节码为


京ICP备16022265号-2 Kotlin China 2017 - 2018