首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java SE: 对象调用,该怎么处理

2012-12-31 
Java SE: 对象调用public class ObjectTest {public ObjectTest(){}public void whoCalledMe() {}}public

Java SE: 对象调用
public class ObjectTest {
public ObjectTest(){}
public void whoCalledMe() {}
}

public class ClassOne {
public static void main(String args[]) {
ObjectTest obj = new ObjectTest();
obj.whoCalledMe();
}
}

public class ClassTwo {
public static void main(String args[]) {
ObjectTest obj = new ObjectTest();
obj.whoCalledMe();
}
}

public class ClassThree {
public static void main(String args[]) {
ObjectTest obj = new ObjectTest();
obj.whoCalledMe();
}
}


怎样实现ObjectTest中的whoCalledMe()方法来获得是哪一个类( ClassOne ClassTwo ClassThree )实例化的此ObjectTest对象
[解决办法]
你可以用一个带参数的构造函数实现
[解决办法]
1楼正解。
你想在类里面直接判断它的一个对象是在哪里实例化是不行的。
但是可以通过传参,告诉它是在哪里实例化的。
[解决办法]
参考:
http://www.cnblogs.com/jingle1267/archive/2012/12/04/2801262.html
写了一下,楼主参考:
代码:

//filename is:FindTheClassOfTheMethodCall.java
//
package csdn.oop;

class ObjectTest 
{
public ObjectTest(){}
public void whoCalledMe()
       {
//--------------------------------------------就这部分
String clazzName = new SecurityManager()
{
public String getClassName()
{
return getClassContext()[2].getName();//0 是 这个内部类,1 是ObjectTest,2是外部直接调用类,3 是更上一级。
}
}.getClassName();
System.out.println("Current class that invoking this method is:  "+clazzName);
}
}

class ClassOne
{
public static void main(String args[]) 
{
ObjectTest obj = new ObjectTest();
obj.whoCalledMe();
}
}

class ClassTwo 
{
public static void main(String args[]) 
{
ObjectTest obj = new ObjectTest();
obj.whoCalledMe();
}
}

class ClassThree
{
public static void main(String args[]) 
{
ObjectTest obj = new ObjectTest();
obj.whoCalledMe();
}
}
class  FindTheClassOfTheMethodCall
{
public static void main(String[] args) 
{
ClassOne.main(args);
ClassTwo.main(args);
ClassThree.main(args);
}
}

[解决办法]
可以取到,参考14楼的方式,或者通过类似下面的代码从当前调用线程的堆栈获取,楼主试试
Thread.currentThread().getStackTrace()[2].getClassName()


之前用下面这种方式获取过当前类名
Thread.currentThread().getStackTrace()[1].getMethodName();

热点排行
Bad Request.