Java 知道我自己是谁吗

Java 知道我自己是谁吗,java,object,instanceof,Java,Object,Instanceof,在一个类中,有可能知道谁实例化了自己吗? 我有一个类监听器,可以被很多其他类实例化,所以在监听器中我想知道谁是“父亲” 我不想用 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) Sy

在一个类中,有可能知道谁实例化了自己吗? 我有一个类监听器,可以被很多其他类实例化,所以在监听器中我想知道谁是“父亲”

我不想用

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);
这是可能的还是我是白痴 谢谢
Nicola

如果您只是在寻找调用构造函数的对象的类,那么可能就是您要寻找的对象。在构造函数中获取堆栈跟踪,并使用它确定哪个类调用构造函数

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;
}
如果要查找特定的对象引用,而不是类,则需要将其作为参数传递。

您可以这样做(只需删除
-
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");
    }
}

如果我理解正确,您想知道哪些类(以及这些类的实例)包含对侦听器类实例的引用

一种可能的解决方案是创建一个接口(如ListenerHolder),该接口定义所有“listener Holder”必须拥有的方法,并在侦听器的构造函数中接受它的实例

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

话虽如此,也许你可以解释你试图解决的真正问题是什么。我怀疑还有其他可能的解决方案,你应该考虑的原始问题。

你能解释你的意思是一个类“自己”吗?这就是你的意思:对不起,谁已经ItWnER例证,我不确定,也许…但是,我想我会将对象作为参数传递。谢谢这应该只是一个评论,暗示这个问题是重复的对不起,答案措词不当。它可能是也可能不是复制品,这完全取决于他的要求。第二段代码在问题的上下文中没有真正意义,让我无法确定要问哪个问题。谢谢,我想我会将对象作为参数传递,因为我还需要调用该类的方法谢谢,我想我可以使用你的解决方案:)。。我正在创建一个与javaee的发布者-订阅者通信,因此我有一个侦听器类,其方法为onMessage,用于接收一个对象,并且必须调用该类的另一个方法来实例化它,以管理所接收对象的内容。。由于许多类可以实例类侦听器,所以要调用的方法是不同的question:我可以使用不同类型的构造函数,每个类可以实例类侦听器。您认为哪种解决方案最好?@Nicola请提供一些代码来说明您的想法。我很乐意给出一些建议。使用不同的构造函数是可行的,但是现在我使用了一个被其他类扩展的类,所以我只能对父对象使用一个构造函数:public Listener(Block Block){this.Block=Block;}@Nicola这是个问题吗?