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);
}

编辑

再次阅读我的代码和您的评论,这可以通过仅传递一个参数以更简单的方式完成:

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

采用

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

采用

public OtherClass(T obj)

反而。

于 2012-07-19T10:22:35.460 回答
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 类型的对象,但您传递this给它的是 MyClass 类型的对象。我认为您的构造函数应该是 OtherClass(Object obj)。

于 2012-07-19T10:23:10.703 回答