可以在一个已经实例化的类中知道吗? 我有一个类Listener,可以被很多其他类实例化,所以在Listener中我会知道谁是“父亲”;
我不想使用
if(objectA instanceOf Class)
....
但我认为这样的事情:
if(this.instanceOf Class1)
System.out.println("Hello i'm the class Listener instanced by Class1);
else if(this.instanceOf Class2)
System.out.println("Hello i'm the class Listener instanced by Class2);
这可能还是我白痴? ;) 谢谢 尼古拉
答案 0 :(得分:1)
如果你只是在寻找调用构造函数的对象的类,那么this question可能就是你要找的东西。获取构造函数中的堆栈跟踪,并使用它来确定哪个类称为构造函数。
如果您正在寻找特定的Object引用而不是类,则需要将其作为参数传递。
答案 1 :(得分:1)
你可以这样做(只需删除.
- this instanceof ClassA
),但在我看来,这似乎是一种不好的做法。如果你想拥有一个依赖于子类的行为,只需在每个子类中实现一个方法并在此时调用它。
例如:
public class Parent
{
public void foo()
{
bar();
}
public void bar()
{
System.out.println("Parent");
}
public static void main()
{
new Parent.foo(); // prints "Parent"
new SubA.foo(); // prints "SubA"
new SubB.foo(); // prints "SubB"
}
}
public class SubA extends Parent
{
@Override public void bar()
{
System.out.println("SubA");
}
}
public class SubB extends Parent
{
@Override public void bar()
{
System.out.println("SubB");
}
}
答案 2 :(得分:1)
如果我理解正确,您想知道哪些类(以及这些类的实例)包含对Listener类实例的引用。
一种可能的解决方案是创建一个接口(例如ListenerHolder),该接口定义所有"监听器持有者"必须在Listener的构造函数中拥有并接受它的实例。
public interface ListenerHolder {
public void doSomething();
}
public class Listener {
public Listener(ListenerHolder holder) {
this.holder = holder;
}
public void doListener() {
this.holder.doSomething();
}
private ListenerHolder holder;
}
话虽如此,也许你可以解释一下你正试图解决的真正问题。我怀疑你应该考虑原始问题还有其他可能的解决方案。