【问题标题】:Passing and using Class in a method in Java在Java中的方法中传递和使用类
【发布时间】:2015-02-09 08:41:19
【问题描述】:
void methodA() {
  methodB(ClassA.class)
}

void methodB(Class classname) {
  classname a; //not correct
  HashMap<String, classname> hash = new HashMap<>(); //not correct
}

IDE 抱怨它不正确。

我想做一些被评论为//不正确的事情。为什么它不正确,我该怎么做?

【问题讨论】:

    标签: java class parameters parameter-passing


    【解决方案1】:

    你不能使用变量名作为类型名,所以methodB 不会编译。

    但是,您可以为该方法使用类型参数。试试

    <T> void methodB(Class<T> clazz) {
        T a;
        HashMap<String, T> hash = new HashMap<>();
    }
    

    【讨论】:

    • methodB(ClassA.class) 还是一样吗? T 是红色的。它要求我创建类 T。为什么在 void methodB 之前有一个&lt;T&gt;
    • 是的,您仍然可以传入ClassA.class。它将控制推断T 的类型。
    • &lt;T&gt; 为该方法声明了一个泛型类型参数,使T 在该方法的范围内。这应该适用于 Java 1.5+(当引入泛型时)。
    • 当您调用methodB 时,将ClassA.class 作为参数传递给methodB。在methodB中,参数clazz被赋值为传入的值-ClassA.class
    【解决方案2】:

    您不能使用变量名作为必须作为参数传递的任何方法的类型。否则会报编译错误。

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多