【问题标题】:Constructor with 2 parameters actually has 3有 2 个参数的构造函数实际上有 3 个
【发布时间】:2021-05-19 17:32:23
【问题描述】:

在运行时使用反射查询类的构造函数信息时。

public class amongUs {
...
...
...
   @Retention(RetentionPolicy.RUNTIME)
   @Target({ElementType.PARAMETER, ElementType.METHOD})
   @interface Message {
   }

   public enum Colors {RED , YELLOW , GREEN ,BLACK , WHITE, BLUE, CYAN, PURPLE, VELVET, BROWN, ORANGE  
   };
   public class Player {

   }
   public class pla extends  Player {
       String color;
       String message = "im not sus";

       @Inject
       public pla(@Message Integer x,@Message String wut) {
           color = (Colors.values()[x]).name();
           message=wut;
       }

   }


...
...
}

但是,当我查看“pla”的构造函数时,它显示它有 3 个参数。

Debugger Description

为什么会发生,我该如何解决?

【问题讨论】:

  • 这是一个内部类。这意味着该类的任何实例都属于外部类amongUs 的一个元素。您只能使用外部类的实例来实例化它。显然,您的调试器将其显示为构造函数参数。如果这不是您想要的,请不要使用内部类。使用顶级类或静态嵌套类。还有Player
  • 所以我应该将 pla 设为静态?
  • 也许吧。我不知道你为什么要使用内部类。你的代码没有说清楚。
  • 好的,谢谢你的回答

标签: java reflection constructor gdb inject


【解决方案1】:

内部类被编译为独立类。 Java 透明地传递对外部类实例的引用作为内部类构造函数的第一个参数。这提供了对外部类实例成员和内部类方法的访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多