是否可以让方法知道谁调用它(不更改参数)然后返回其他内容?
public class MyClassA {
public static final String someStirng = "this is some String"
public String getSomeString ()
{
return someString;
}
}
public class MyClassB extends MyClassA {
public static final String otherstring = "This is other string"
public SomeBean getContents()
{
SomeBean s = new someBean();
//if this method gets called from MyCallingClassOther then
// i want s.setContents(otherstring)
s.setContents(getSomeString());
return s;
}
}
public class MyCallingClass {
public String callingclassContents ()
{
MyClassB myb = new MyClassB();
return ((SomeBean)myb.getContents()).getFirstName();
}
}
public class MyCallingClassOther {
public String callingOtherContents ()
{
MyClassB myb = new MyclassB();
return ((SomeBean)myb.getContents()).getFirstName();
}
}
所以当getContents()
的{{1}}方法从MyClassB
调用时,我想要返回一个不同的东西。
只有我可以更改的代码是MyCallingClassOther
的主体(无法更改参数)。或者我可以在getContents()
中更改callingOtherContents()
的正文。
这是我试图解决的一个更大的难题的一小部分......显然设计得很差。这是一种hackway。
另外,我想看看其他一些语言是如何实现的?
如果您想知道为什么我无法更改参数......那是因为我不想更改MyCallingClassOther
callingclassContents()
中的任何内容
答案 0 :(得分:5)
这是一个更大拼图的小块 我想解决......哪个 显然设计得很差。这是 一种hackway。
可以做你想做的事;看@Taylor L'的答案。但请注意,在Java中创建异常并不便宜。
但我的主要观点是,从长远来看这样做几乎肯定是一个坏主意。这种诡计使你的代码更难理解,并为后来的人留下各种各样的小陷阱。
IMO,您最好更改方法API和调用它的代码,以便调用者(实际上)了解行为差异。简而言之,修复糟糕的设计,不要让它变得更糟。
答案 1 :(得分:2)
这将为您提供有关来电者的信息。根据您想要查询的级别数量,“1”会根据需要发生变化。
StackTraceElement aParentStack = new Throwable().fillInStackTrace().getStackTrace()[1];
System.out.println(aParentStack.getClassName());
System.out.println(aParentStack.getFileName());
System.out.println(aParentStack.getLineNumber());
System.out.println(aParentStack.getMethodName());
System.out.println((aParentStack.isNativeMethod() ? "Native" : "Java") + " method");