1

これは2つの部分からなる質問です。まず、次のような一般的な定義済みオブジェクトメソッドを使用できますか?

public class MyClass<T>{

    public MyClass(T t){
        t.setText("Hello World"); // Assume class T is JMenuIten has the special method setText
    }

}

このコードはそのままでは機能しませんが、私が目指しているものの一般的な考え方を示しています。そのカプセル化されたオブジェクトに固有のメソッドを使用したいと思います。ただし、カプセル化されたメソッド.doSomethingを含む別のオブジェクトを渡す場合。やりたい...

public class MyClass<T>{

    public MyClass(T t){
        t.doSomething("Hello World"); // Assume class T is JMenuIten has the special method setText
    }

}

これが可能であることを望んでいます。そうしないと、すべての特殊なケースを処理するために複数のコンストラクターを作成する必要があります。

2番目の質問は、GUIコンポーネントを返し、...などのステートメントを実行したいという点で似ています。

myJPanel.getComponent(1).setText("Hello"); // Assuming index 1 is a JLabel and setText is a specific method defined in the JLabel class

このようなものを機能させる方法があることを期待していましたが、コンパイラーは実行時にどのシンボルが必要になるかを事前に知ることができないため、このコードは機能しません。また、可能であれば、どのクラスタイプの.getComponent()が返されるかを教えてくれるメソッドがあるかどうかも知りたいです。すべてをハードコーディングすることなく、コードを可能な限り動的にしようとしています。

ありがとう

4

1 に答える 1

3

制限付きのワイルドカードを使用する必要があります。

例えば

public interface MyObject {
    void myMethod();
}

public class GenericObj<T extends MyObject> {
    private T t;

    public void invokeMethod() {
        t.myMethod(); //this way you can invoke methods (declcared in MyObject) on T
    }
}
于 2012-11-28T01:34:56.730 に答える