假设我有一个申请表:
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);
}
答案 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
答案 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;
}