繁体   English   中英

在类上调用静态方法?

[英]Calling static method on a class?

说,我有一个SomeType具有静态方法的Class对象的引用。 有没有一种方法可以调用该方法而不先实例化SomeType? 最好不要转义强类型。

编辑:好的,我搞砸了。

interface Int{
    void someMethod();
}

class ImplOne implements Int{
    public void someMethod() {
        // do something
    }
}

Class<? extends Int> getInt(){
    return ImplOne.class;
}

在这种情况下,someMethod()始终不能是静态的。

我不确定情况到底是什么,但是如果您要在不知道类类型的情况下对类执行静态方法(即,您不知道它是SomeType,则只有Class对象),如果您知道可以使用反射的方法的名称和参数,然后执行以下操作:

Class c = getThisClassObjectFromSomewhere();

//myStaticMethod takes a Double and String as an argument
Method m = c.getMethod("myStaticMethod", Double.class, String.class);
Object result = m.invoke(null, 1.5, "foo");

根据定义,静态方法是在类上调用的,而不是在该类的实例上调用的。

因此,如果您使用:

SomeClass.someStaticMethod()

您没有实例化任何东西(不考虑SomeClass类本身的类加载和实例化,这是JVM处理的,超出了您的范围)。

这与已实例化的对象上调用的常规方法相反:

SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();

由于您谈论的是Class对象,因此我假设您对Java反射感兴趣。 这是一个简短的片段,可以完成您要执行的操作:

Class someClass = SomeType.class;
Method staticMethod = someClass.getMethod( "methodName", ... );

// pass the first arg as null to invoke a static method
staticMethod.invoke( null, ... );

是。 这就是静态方法的全部意义。 随便叫吧。 SomeType.yourStaticMethodHere()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM