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对象
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对象
private String name;
public ObjectTest(String name){
this.name = name}
public void whoCalledMe() {
System.out.printlen(name+" called me.")}
}public class ClassOne {
public static void main(String args[]) {
ObjectTest obj = new ObjectTest("ClassOne");
obj.whoCalledMe();
}
}
public void whoCalledMe(String msg) {}
System.out.println(msg);
}obj.whoCalledMe("在ClassOne里实例化的");
1. 只能使用无参构造函数
2. 具体的实例化并不由我控制,换言之我只负责ObjectTest类的开发,对于是否由 ClassOne, ClassTwo, ClassThree 或者其它类来创建此ObjectTest类对象我并不知情目的:
通过whoCalledMe()函数来获取到底是哪一个类实现了此ObjectTest类对象Thanks.
public class ObjectTest {
public ObjectTest(){}
public void whoCalledMe(String name){
System.out.println(name+"calledME");
}
}
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();
通过堆栈来反推,此方法确实可行,领教了