メソッドのパラメータとして任意のクラスを渡します

AristotleTheAxolotl:

これはおそらく、前に尋ねてきたと私はラインに沿っていくつかの類似した/を見てきましたが、非常にそれを理解していませんでした。

メソッドは、パラメータとして任意のクラスを受け入れるようJavaでは、どのようにそれを作るのですか?

例えば、

public (AnyClass) myMethod(String whatever, (AnyClass) thisClass){

}

以下のように使用します:

myMethod("Hello", ClassA);
myMethod("Hello", ClassB);

任意の助けてくれてありがとう!

編集:

使用例は、のために頼まれました。私がやっていることはPOJOにJSON文字列をマッピングし、それが再利用できるように、この全体のことのうち抽象化しようとしています。だから、 - POJOとするかもしれどんなタイプのオブジェクトを返すことをビルドにジャクソンを使用し、その後構築し、その後、私は、任意のクラスを通過できるようにする必要があり、JSON文字列(またはHttpConn)。

(私が何をしたいのアイデア):

public Class<?> doSomething(String jsonString, Class<?> clazz){
    clazz newInstance = mapper.readValue(jsonString, clazz);
    return clazz;
}

以下のように呼び出します:

ClassA test = doSomething("String One", ClassA.class);
ClassB testTwo = doSomething("Different format string", ClassB.class);

問題の理解に役立ちます...とソリューションの私の理解願っています!

DodgyCodeException:

最新の編集では、あなたの使用例は、このようなものです:

ClassA test = doSomething("String One", ClassA.class);

クラス名、クラスオブジェクトとクラスのインスタンス間の問題ショーの混乱。だから、上記の例を使用して、明確にします:

  • クラス名- ClassA-変数を宣言するために使用されます。

  • クラスインスタンス- ClassA.class-クラスについての情報を保持し、メソッドへの引数として渡すことができるシングルトンオブジェクトです。

  • クラスのインスタンスは、 - test-オブジェクトです。これは、通常使用して作成していますnewキーワードを。

あなたは使用することはできませんClassなど、オブジェクトをClassA.class直接宣言で、。代わりに、呼び出す必要がありnewInstance()方法Classクラスを。その方法は、あなたのクラスが引数なしのコンストラクタを持っている場合にのみ使用することができます。コンストラクタ引数でインスタンスを作成するには、使用このような何かを:

public <T> T doSomething(String jsonString, Class<T> clazz) throws ReflectiveOperationException {
    Constructor<T> constructor = clazz.getConstructor(String.class);
    return constructor.newInstance(jsonString);
}

上記の方法は、文字列(渡された文字列)を受け取るコンストラクタを使用して、必要なクラスのインスタンスを作成します。あなたの要件に応じてインスタンスを作成するために、その本体を変更します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223348&siteId=1