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楼正解。
你想在类里面直接判断它的一个对象是在哪里实例化是不行的。
但是可以通过传参,告诉它是在哪里实例化的。可以取到,参考14楼的方式,或者通过类似下面的代码从当前调用线程的堆栈获取,楼主试试
Thread.currentThread().getStackTrace()[2].getClassName()
之前用下面这种方式获取过当前类名
Thread.currentThread().getStackTrace()[1].getMethodName();参考:
http://www.cnblogs.com/jingle1267/archive/2012/12/04/2801262
写了一下,楼主参考:
代码:
//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);
}
}