首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在类上调用静态方法?

在类上调用静态方法?
EN

Stack Overflow用户
提问于 2019-06-11 01:50:33
回答 2查看 0关注 0票数 0

比如说,我引用了一个具有静态方法的SomeType的Class对象。有没有办法调用该方法而无需首先实例化SomeType?最好不要逃避强类型。

代码语言:javascript
复制
interface Int{
    void someMethod();
}

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

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

在这种情况下,someMethod()无论如何都不能是静态的。

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 10:14:17

我不确定情况究竟是什么,但是如果你想在不知道类类型的情况下在类上执行静态方法(即你不知道它是SomeType,你只需要Class对象),如果你知道你可以使用反射的方法的名称和参数,并执行以下操作:

代码语言:javascript
复制
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");
票数 0
EN

Stack Overflow用户

发布于 2019-06-11 10:53:11

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

所以如果你使用:

代码语言:javascript
复制
SomeClass.someStaticMethod()

你实际上没有实例化(抛开SomeClass类本身的类加载和实例化,JVM处理它并超出你的范围)。

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

代码语言:javascript
复制
SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档