2

クラスのインスタンスを別のオブジェクトに渡そうとしていますが、うまくいきません。

私は現在これを持っています:

class MyClass
{
    public void myFunc()
    {
        OtherClass bla = new OtherClass(this);
    }

    public void callback()
    {
        // code...
    }
}

class OtherClass
{
    public OtherClass(Class<?> obj)
    {
        // do some stuff...

        // Call method from obj
        Method method = obj.getMethod("callback", SomeObject.getClass());
        method.invoke(obj, SomeObject);
    }
}

しかし、今では次のエラーが表示されます。

コンストラクター OtherClass(MyClass) は未定義です

したがって、コンストラクターでクラス名のハードコードを指定することを期待しています。すべてのクラスを受け入れるように、ジェネリック型にするにはどうすればよいですか?

4

6 に答える 6

3

次のようにする必要があります。

OtherClass bla = new OtherClass(this.getClass(), this);

と:

public OtherClass(Class<?> clazz, Object obj)
{
    // do some stuff...

    // Call method from obj
    Method method = clazz.getMethod("callback", SomeObject.getClass());
    method.invoke(obj, SomeObject);
}

編集

私のコードとあなたのコメントをもう一度読むと、これはさらに簡単な方法で、1 つのパラメーターのみを渡すことで実行できます。

OtherClass bla = new OtherClass(this);

と:

public OtherClass(Object obj)
{
    Class<?> clazz = obj.getClass();
    // do some stuff...

    // Call method from obj
    Method method = clazz.getMethod("callback", SomeObject.getClass());
    method.invoke(obj, SomeObject);
}
于 2012-07-19T10:19:02.770 に答える
2

MyClassコンストラクターがオブジェクトのインスタンスを期待しているときに、オブジェクトにインスタンスを渡していClassます。試すことができます。

OtherClass bla = new OtherClass(this.getClass());
于 2012-07-19T10:22:07.560 に答える
0

あなたの論理には深刻な欠陥があります。コンストラクターのシグネチャはクラスを想定していますが、そのメソッドを呼び出しています。オブジェクトであることを示します。

また、なぜこれを行うのかわかりません。コールバックを呼び出す必要がある場合は、そのインターフェイスを作成するだけです。

interface CallbackHaving{
  void callback();
}

class MyClass implements CallbackHaving
{
    public void myFunc()
    {
        OtherClass bla = new OtherClass(this);
    }

    public void callback()
    {
        // code...
    }
}

class OtherClass
{
    public OtherClass(CallbackHaving obj)
    {
        // do some stuff...

        // Call method from obj
        obj.callback();
    }
}
于 2012-07-19T10:22:43.063 に答える
0

OtherClass コンストラクターは Class 型のオブジェクトを受け取りますが、thisMyClass 型のオブジェクトを渡しています。あなたのコンストラクターは OtherClass(Object obj) であるべきだと思います。

于 2012-07-19T10:23:10.703 に答える
0

使用する

public OtherClass(Class<? extends Object> obj)
于 2012-07-19T10:21:26.187 に答える
0

使用する

public OtherClass(T obj)

代わりは。

于 2012-07-19T10:22:35.460 に答える