2016-05-19 3 views
0

メソッドの値を返す必要があります。また、呼び出されるオブジェクトを含むメソッドの名前を出力する必要があります。例えば:メソッド名が文字列で指定されているメソッドの値を返す方法は?

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)"); 

     } 
} 

結果:上記のプログラムは、LSがオブジェクトであり、getamount()が別のクラスLoanApprovalSystem()方法であるオブジェクトを含む文字列としてメソッド名を印刷しているLS.getamount()

しかし、結果として返される整数値を出力する必要があります。LS.getamount()しかし、私はLS.getamount()を文字列として返しました。文字列からLS.getamount()の実際の値を返す方法がわかりません。

私には、文字列で与えられるメソッドgetamount()の値を返す方法はありますか?つまり、文字列LS.getamount()を参照として使用して、getamount()というメソッドを呼び出すことはできますか?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

メソッド呼び出しの文字列表現でメソッドを呼び出そうとしていますか? –

+0

はい。しかし、それが可能かどうかはわかりません!または、メソッドを呼び出す他のメソッドがありますか? – Nitu08

+1

これは参考になる可能性がありますhttp://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method-when-given-the-method-name-as-a-string –

答えて

0

使用反射:

クラスLoanApprovalSystem()は以下のとおりである

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) 

しかし、通常、あなたは、リフレクションを使用しません。それ以外の方法はありません。 ここでの使用と危険性を探しますhttps://softwareengineering.stackexchange.com/questions/123956/why-should-i-use-reflection

関連する問題