質問

言って、私はSomeTypeが静的メソッドを有するクラスオブジェクトへの参照を持っています。最初SomeTypeをインスタンス化するO / Wそのメソッドをコールする方法はありますか?好ましくは強い型付けをエスケープしません。

編集:OK、私はめちゃくちゃました。

interface Int{
    void someMethod();
}

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

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

この場合のsomeMethod()はとにかく静的ことができない。

役に立ちましたか?

解決

静的メソッドは、定義により、クラスではなく、そのクラスのインスタンスに呼び出されます。

あなたが使用している場合のでます:

SomeClass.someStaticMethod()

あなたは(JVMが処理し、あなたの範囲外の道である、脇SomeClassクラス自体のクラスのロードとインスタンス化を残して)何もインスタンス化されていません。

これはすでにインスタンス化されたオブジェクトに呼び出され、通常の方法に反対しています

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

他のヒント

私は状況が正確にわからないんだけど、あなたはクラス型を知らなくても、クラスの静的メソッドを実行するために探している場合(つまり、あなたはちょうどClassオブジェクトを持っている、それはSomeTypeだかわかりません)あなたがメソッドの名前とパラメータを知っていれば、あなたはリフレクションを使用してこれを行うことができます:

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");
あなたは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帰属
所属していません StackOverflow
scroll top