我试图将一个类的实例传递给另一个对象,但我无法让它工作。
我目前有这个:
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。我如何使它成为泛型类型,以便它接受所有类?
答案 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)。