让函数知道谁调用它的方法

Omn*_*ent 0 java

在java中是否可以让方法知道谁调用它(不更改参数)然后返回其他内容?

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以当从那时getContents()MyClassB被调用的方法MyCallingClassOther我想要一个不同的东西返回.

只有我可以改变的代码是getContents()(不能改变参数)的主体.或者我可以改变的身体callingOtherContents()MyCallingClassOther.

这是我试图解决的一个更大的难题的一小部分......显然设计得很差.这是一种hackway.

另外我想看看在其他一些语言中它是如何可行的?

而如果你想知道为什么我不能改变参数......那是因为我不想改变什么callingclassContents()MyCallingClass

Ste*_*n C 5

这是我试图解决的一个更大的难题的一小部分......显然设计得很差.这是一种hackway.

你可以做你想做的事; 看@Taylor L'的答案.但请注意,在Java中创建异常并不便宜.

但我的主要观点是,从长远来看,这样做几乎肯定是一个坏主意.这种诡计使你的代码更难理解,并为后来的人留下各种各样的小陷阱.

IMO,你最好更改方法API和调用它的代码,以便调用者(实际上)知道行为差异.简而言之,修复糟糕的设计,不要让它变得更糟.