java:如何传递一个类并调用其静态成员?

时间:2017-10-01 14:01:56

标签: java

正如标题所说的那样。我试图将一个类传递给函数

f(MyType.class)

其中

class MyType {
    static int g() {...}
}

接收班级的功能

void h(Class<MyType> cls) {...}

以某种方式访问​​此方法?

3 个答案:

答案 0 :(得分:1)

鉴于函数h需要传递MyType类,我认为没有理由不使用MyType.g();的静态访问形式

答案 1 :(得分:1)

您无法调用类的g()方法,因为参数将依赖于Class类型。您只能调用Class提供的方法。

通过传递MyType的实例并在其上调用方法实例,您尝试做的事情似乎更自然。
如果您在多个类中定义了g(),请在接口中定义此方法并使这些类实现它。

答案 2 :(得分:1)

从技术上讲,你可以使用反射来实现:

Class klass = ...;
Method m = klass.getDeclaredMethod(methodName, paramtypes);
m.invoke(null, args)

但它对于java来说并不自然,最好将这个方法传递给某个接口的函数对象:

interface MyType {
    int g();
}

void h(MyType myType) {
  myType.g();
}