有没有办法获取创建另一个对象的对象的实例?

时间:2015-07-10 00:26:50

标签: java object

假设我有一个申请表:

my_Application the_application = new my_Application();
Parser parser = new Parser;
parser.log();

然后,获取一些方法parser.log()将字符串抛出到应用程序的窗口中?

public void log(String input){
    // Get the instance of the object which created this object, call it 'daddy'
    daddy.log(input);
}

在my_Application的原始类中,有一个方法log

public void log(String input){
    textPane.append("[LOG] " + input);
}

5 个答案:

答案 0 :(得分:1)

正如您的代码所代表的那样,您无法做到。您的parser需要引用the_application。一种方法是在构造函数中:

public class Parser {
    private my_Application daddy = null;
    public Parser(my_Application app) {
        daddy = app;
    }

    public void log(String input){
        daddy.log(input);
    }
}

然后你创建解析,如:

my_Application the_application = new my_Application();
Parser parser = new Parser(the_application);

作为一方,声明带有下划线的java类并不常见。而是使用类似MyApplication

的camelcase惯例

答案 1 :(得分:0)

不,除非创建的对象拥有对其创建者的某些引用。没有固有的联系。

答案 2 :(得分:0)

我最好的建议是为构造函数提供“daddy”类,并确保它实现了一个具有void log(String input)方法的接口。

interface Logger{
    void log(String input);
}

public class Parser implements Logger{

    Logger parent;

    public Parser(Logger parent){
        this.parent = parent;
    }

    void log(String input){
        parent.log(input);
    }
}

public class my_Application implements Logger{
    void log(String input){
        textPane.append("[LOG] " + input);
    }

    public static void Main(String[] args){
        my_Application the_application = new my_Application();
        Parser parser = new Parser(the_application);
        parser.log();
    }
}

答案 3 :(得分:0)

您可以使用堆栈跟踪获取此信息

getClassName()

根据Javadocs:

  

数组的最后一个元素表示堆栈的底部,   这是序列中最近的方法调用。

StackTraceElement有getFileName()getLineNumber()getMethodName()reflection

请参阅http://www.javaworld.com/article/2072391/the-surprisingly-simple-stacktraceelement.html了解教程

虽然这回答了您的问题,但这对您想要调用父方法的方式没有帮助。假设您可以使用{{1}},您可以调用该方法。

否则请考虑使用

  • 静态方法
  • 通过传递对父调用方法的链接。
  • 继承?

答案 4 :(得分:0)

最简单的&友好的方式:继续参考父母。

private Parent parentReference;
public Child(Parent parent)
{
    this.parentReference = parent;
}