将未知对象传递给Java中的方法

时间:2012-07-19 10:17:52

标签: java

我试图将一个类的实例传递给另一个对象,但我无法让它工作。

我目前有这个:

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)未定义

所以我希望我在构造函数中给出类名hardcode。我如何使它成为泛型类型,以便它接受所有类?

6 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:2)

当构造函数需要MyClass对象的实例时,您正在Class对象上传递实例。你可以试试;

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

答案 2 :(得分:0)

使用

public OtherClass(Class<? extends Object> obj)

答案 3 :(得分:0)

使用

public OtherClass(T obj)

代替。

答案 4 :(得分: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();
    }
}

答案 5 :(得分:0)

你的OtherClass构造函数接受一个Class类型的对象,但你将this传递给它,它是MyClass类型的对象。我认为你的构造函数应该是OtherClass(Object obj)。