2016-05-19 2 views
0

Ich muss den Wert einer Methode zurückgeben, und ich muss auch den Namen der Methode einschließlich des Objekts, mit dem es aufgerufen wird, drucken. Zum Beispiel:Wie gibt man den Wert einer Methode zurück, bei der der Methodenname durch einen String angegeben wird?

public class FindMethod {  
public void accessor(String m){ 
      String amount = "getamount()" ; 
      String str=""; 
      if(m.equals("Receive(int)")) 
       str+= "LS."+amount; 
      System.out.println(str); 
     } 

     public static void main(String[] args) 
     { 

      FindMethod fm = new FindMethod(); 
      fm.accessor("Receive(int)"); 

     } 
} 

Ergebnis: LS.getamount()

Das obige Programm druckt den Methodennamen als String einschließlich des Objekts, in dem LS das Objekt und getamount() ist die Methode einer anderen Klasse LoanApprovalSystem().

Aber ich brauche den Integer-Wert zu drucken, die durch das Ergebnis LS.getamount() zurückgegeben werden. Aber ich habe LS.getamount() als String zurückgegeben. Ich bin nicht sicher, wie man den tatsächlichen Wert LS.getamount() von der Zeichenkette zurückbringt.

Kann mir jemand eine Idee, die, wie kann ich den Wert der Methode getamount() zurück, die durch eine Schnur gegeben ?? Ich meine, kann ich die Zeichenfolge LS.getamount() als Referenz verwenden, um die Methode getamount() aus der Klasse LoanApprovalSystem() ??

public class LoanApprovalSystem { 

    private static int amount; 
    private static String risklevel ; 
    private static boolean approve; 
    private static boolean message; 
    private static String result ; 

    public LoanApprovalSystem(){ 

    } 

    void initialize(){ 
     amount=0; 
     risklevel=null; 
     approve=false; 
     message=false;  
    } 

    public void Receive(int req){ 
    amount = req; 
    } 

    public void Asses(int req){ 

      if (req > 1000 && req <= 5000) 
      { 
       risklevel = "low"; 
       approve = true; 

      } 
      else if (req > 5000 && req <= 10000) 
      { 
       risklevel = "high"; 

      } 
      else 
       risklevel = " "; 
    } 

    public void Approval(int req){ 
     if ((req > 10000) || ((req <= 10000) & getrisklevel() =="high")) 
     { 
      approve = false; 
     } 

     else if (amount <= 5000 && getrisklevel() == "low") 
      { 
      approve = true; 
      } 
    } 

    public void Sendmessage(String risklevel){  
     if(risklevel == "low") 
     { 
      message=true; 
      //System.out.println(message); 
      //System.out.println("Loan approved"); 
     } 
     else 
      message=false; 
    } 

    public void Reply(boolean message, boolean approve){ 
     if(message == true || approve == true) 
     { 
      result = ("Loan Approved"); 
      //System.out.println("Loan Approved"); 
     } 
     else 
     { 
      result = ("Loan Rejected"); 
      //System.out.println("Loan Rejected"); 
     } 
    } 

    public int getamount(){ 
     return (amount); 
    } 

    public String getrisklevel(){ 
     return(risklevel); 
    } 

    public boolean getapprove(){ 
     return (approve); 
    } 

    public boolean getmessage(){ 
     return(message); 
    } 

    public String getresult(){ 
     return (result); 
    } 


    public String toString(){ 
     String str = ""; 
     str += "(" +result+ ")."; 
     return str; 

    } 


    public static void main(String[] args){ 
     LoanApprovalSystem LS = new LoanApprovalSystem(); 
     TestdataGeneration testdata = new TestdataGeneration(); 
     LS.initialize(); 
     //for(int data:testdata.Testdata()) 
     { 
     LS.Receive(testdata.thirddata()); 
     LS.Asses(LS.getamount()); 
     LS.Approval(LS.getamount()); 
     LS.Sendmessage(LS.getrisklevel()); 
     LS.Reply(LS.getmessage(), LS.getapprove()); 
     System.out.println("Final state: "+LS); 
     } 
    } 

} 
+1

Versuchen Sie, eine Methode durch die Zeichenfolgendarstellung des Methodenaufrufs aufzurufen? –

+0

ja. Aber ich bin mir nicht sicher ob es möglich ist oder nicht! Oder gibt es eine andere Methode, um die Methode aufzurufen? – Nitu08

+1

Dies könnte hilfreich sein http://stackoverflow.com/questions/160970/how-doi-i-voke-a-java-method-when-given-the-method-name-as-a-string –

Antwort

0

Verwenden Reflexion:

Die Klasse LoanApprovalSystem() ist unten angegeben

http://java.sun.com/docs/books/tutorial/reflect/member/methodInvocation.html

Class<?> c = Class.forName("className"); 
Method method = c.getDeclaredMethod ("methodName", parameterTypes) 
Object o = method.invoke (objectToInvokeOn, paramList) 

Aber in der Regel verwenden Sie keine Reflexion. Nur wenn es keinen anderen Weg gibt. Suchen Sie nach Verwendung und Gefahr der Reflexion hier https://softwareengineering.stackexchange.com/questions/123956/why-should-i-use-reflection

Verwandte Themen