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);
}
}
Thread.currentThread().getStackTrace()[2].getClassName()
Thread.currentThread().getStackTrace()[1].getMethodName();