在Java中是否有任何方法可以找到对象所属的类?
class WrapperClass
{
SomeObject o;
...
someMethodOfWrapperClass()
{ ... }
}
[...]
SomeObject foo = new SomeObject();
WrapperClass wrap = new WrapperClass();
wrap.o = foo;
有没有办法从在 SomeObject对象或其中一个方法中找到相应的WrapperClass对象wrap
?
有点像:
foo.getWrapperClassObject().someMethodOfWrapperClass();
非常感谢你!!
托马斯
答案 0 :(得分:2)
简短的回答是“不”。
你可以像robev建议用户那样做,并将对包装类的引用传递给SomeObject
,但这会在两个类之间创建一个循环关系,WrapperClass
不再真正< / em>一个包装类。
这引出了为什么你试图这样做的问题。
在大多数情况下,当我们创建一个包装类时,我们正在包装我们无法控制的代码,因此您通常甚至无法修改SomeObject的构造函数。
您是否考虑过尝试继承?也许您的WrapperClass
应该扩展SomeObject
,并将someMethodOfWrapperClass()
方法添加为其他行为。
也许是这样的:
public class ExtendingClass extend SomeObject
{
public void someMethodOfExtendingClass()
{ ... }
}
// so you can define an instance 'foo' which is ALSO an instance of SomeObject
ExtendingClass foo = new ExtendingClass();
// now you can call...
foo.someMethodOfExtendingClass();
答案 1 :(得分:0)
你可以有一个父子关系,其中SomeObject被告知其父是谁,所以当你执行getWrapperClassObject()时,你只需返回存储的父指针。
示例构造函数:
SomeObject(WrapperClass parent) { this.parent = parent; }
答案 2 :(得分:0)
在SomeObject中:WrapperClass.this.someMethodOfWrapperClass();
答案 3 :(得分:0)
我真的不能想到做你想要做的事情是有道理的......但是你可能会发现内部阶级在做这件事时很有用......
class Outer
{
Inner inner = new Inner();
class Inner
{
void foo()
{
bar();
}
}
void bar()
{
System.out.println("bar");
}
public static void main(String[] argv)
{
Outer o;
o = new Outer();
o.inner.foo();
}
}
robev的答案基本相同,但是robev有更通用的答案(Inner在我发布的代码中引用了Outer,它只是隐藏并由编译器创建)。
答案 4 :(得分:0)
正如其他人所说,这是非常可疑的代码。
有几种方法可以实现它。
SomeObject
的引用,但这会导致像Justin指出的循环依赖。SomeObjectWrapper extends SomeObject
,但你甚至可以控制那部分代码吗?最后一个是设置一个约定并使用反射来获取代码(我使用的是WrappedObject.name +“Wrapper”):
package test;
public class ObjectWrapper {
Object o;
public ObjectWrapper(Object o){
this.o = o;
}
}
Object o = new Object();
String pack = "test";
String name = package+o.getClass().getSimpleName()+"Wrapper";
Class objWrapper = Class.forName(name);
objWrapper.getConstructor(Object.class).newInstance(o);
但这对于任何用途来说都太笨拙了。例如,如果你制作Object o = new Integer
,整个事情就会从异常中爆发。
答案 5 :(得分:0)
这个问题没有意义。对象不是“类的一部分”。 引用是类的一部分,但它们指的不是。多个引用可以指向同一个对象。因此,您甚至无法获得任何特定对象的唯一引用,更不用说引用所在的类。