被调用对象的方法内部,如何"动态"获得调用者(调用对象)的引用。如题:class A{
f1(){
B.f2()
}
}class B{
static f2(){
//这里如何动态获得 调用者的引用。
}
}注意 “调用者”可能是实现某接口的 任何类的实例。
我想问的是:不进行任何参数传递情况下引用 “调用者”类似 Thread.currentThread() 可以获得“调用线程”的引用。
f1(){
B.f2()
}
}class B{
static f2(){
//这里如何动态获得 调用者的引用。
}
}注意 “调用者”可能是实现某接口的 任何类的实例。
我想问的是:不进行任何参数传递情况下引用 “调用者”类似 Thread.currentThread() 可以获得“调用线程”的引用。
楼主【qzhl】截止到2008-07-01 21:25:52的历史汇总数据(不包括此帖):
发帖的总数量:2 发帖的总分数:50
结贴的总数量:2 结贴的总分数:50
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
int i;
StackTraceElement stack[] = (new Throwable()).getStackTrace();
for (i=0; i < stack.length; i++) {
StackTraceElement ste=stack[i];
System.out.println(ste.getClassName()+"."+ste.getMethodName()+"(...)");
System.out.println(i+"--"+ste.getMethodName());
System.out.println(i+"--"+ste.getFileName());
System.out.println(i+"--"+ste.getLineNumber());
}
}
1 似乎是一个变通的方法。
2 可我更希望 java 有官方提供的直接语法或方法。但经过思考 我发现你的方法有个逻辑问题:我是希望 类B方法内部 获得 调用它的 A 对象的引用。而你提供的方法如果在 B.f2内部调用 那么这个 Caller 应该是 f2另外 StackTraceElement 我查文档似乎也无法获得对象的引用?感谢回复。
class A{
f1(){
B.f2(this); //传递this
}
}class B{
static void f2(A a){ //f2方法加个参数
a.xxxxxx;
}
}
显然我 A B 类有某种内在联系。因此我想让 B 类内部 自动引用 A (这是结构需要,是个固定的结构)采用参数化的方法,虽然可以实现,但是没有最大限度的“体现出结构特征”和隐藏不必要的细节(有参数当然就意味着一定意义上的开放)。在我的特定问题上,我又同时需要 B 有一定的独立性。
传递的参数可以给予以一定的限制interface Idosomething {
public void dosomething();
}class A {
public void f1() {
B.f2(getReference());
}
public void dosomething() {
System.out.println("aaa");
}
private class Closure implements Idosomething{
public void dosomething() {
A.this.dosomething();
}
}
public Idosomething getReference() {
return new Closure();
}
}public class B {
static void f2(Idosomething A) {
A.dosomething();
}
public static void main(String[] args) {
new A().f1();
}
}