2011-10-27 114 views
2

,使用方法,我想弄清楚,如果我想要做的就是甚至有可能。我環顧四周,谷歌並沒有超級有用,至少在這個特定的情況下。匿名類

這是我正在嘗試做的。我工作的分配被設計爲在命令行中運行多次,有兩個可能的套參數:[「創建」「cardType」]或[「驗證」,「使用accountNumber」「transactionAmout」。每次傳遞「CREATE」標誌時,都會創建類的匿名實例 - 構造函數創建與該類關聯的各種數據字段,並將它們寫入文件,然後程序退出。好的,到目前爲止。 下面是構造一個片斷(有這幾條,但他們都幾乎相同):

if(issuer.compareTo("AE") == 0) 
    { 
     try 
     { 
     cardType = "American Express"; 
     firstDigit = 3; 
     accountNumber = accountNumberGen(firstDigit);    
     memberSince = new java.util.Date(); 
     limit = setLimit(accountNumber); 
     output.write(accountNumber + "|" + cardType + "|" + 
       memberSince + "|" + limit + "\r\n"); 
     } 
     catch(Exception e) 
     { 
      System.out.printf("An unexpected error occured. Sorry.\n" 
        + "American Express Constructor."); 
      System.exit(0); 

     } 

所以,這裏的什麼,我想弄清楚。下一步是「驗證」標誌。如果驗證標誌是從命令行傳遞的,我需要進入該文件,讀出存儲在其中的數據,進行更改並將其寫回文件。再次,好,迄今。這裏的問題:

由於沒有類的實例,我不能調用類中的方法。但是,驗證方法不需要類的實例來完成它的工作 - 它完全處理命令行參數,以及讀取/寫入文件。那麼,我該如何去匿名調用類中的方法?我是否必須創建另一個驗證類,或者將該方法移到我的主類中?我對這兩者都有點猶豫,因爲這項任務意味着應該有一個類來處理創建和驗證。或者,另一種可能性是,我在處理這個問題時的邏輯恰恰是有缺陷的?

此代碼是一項正在進行的工作 - 異常將會變得更加具體和所有打開的文件流將會被關閉,等

+1

是什麼構造,從如果沒有類的一個片段?我想我們需要一些關於實際對象結構的細節。另外,你對這些有多少控制?這聽起來像你應該使用與許多實現類(或抽象的超類)的接口。 – Thor84no

+0

這就是我通過匿名的意思是,我可能會用錯誤的術語...... '公共靜態無效的主要(字串[] args)拋出異常 { inputValidation(參數); if(args.length == 2) new Account(args [1]); }' – MikeTheLiar

回答

2

如果我正確理解了你的問題/任務(我不確定我是否確實需要這個任務,你需要使用匿名類嗎?實際上, Java,只有匿名類),這聽起來像你可能想要一次性的Vertification類或靜態方法。

的一次性方法:

Verification v = new Verification(commandLineArgs); 
v.verify(); 
// Done with 'v' 

靜態方法...方法:

Verification.verify(commandLineArgs); 

當方法在類中定義爲:

public class Verification { 
    ... 
    public static void verify(String ... commandLineArgs) { 

    } 
    ... 
} 
+0

這聽起來很有希望。我認爲這可能是要走的路。 – MikeTheLiar

+0

更新....得到這個工作,非常感謝。不過,我還有另一個問題,因爲我仍在使用匿名呼叫: 新帳戶(args [1]); 新驗證(args [1],args [2]); 即使他們宣佈後沒有用處,他們會更好地命名他們嗎?這些類本身正在做所有需要做的事情(寫作,閱讀,處理等)。或者,我的課程設計不好? – MikeTheLiar

+0

如果你只是在調用構造函數,那麼你的類設計得很差。您應該將構造函數代碼放入靜態方法中。 (我建議的第二種方法。)構造函數只能用於實例變量初始化,以及任何其他類型的需要使用該對象的設置**,但通常不會執行任何額外的執行。 –

3

一個縮寫:KISS

是的,你可以做各種魔法,通過反射調用方法等。但爲什麼要麻煩?

創建這需要第一個參數,並創建一個CreateHandlerVerificationHandler一個主要方法。這兩種實現Handler接口,它具有以下方法:

void run(String[] args); 

所以在開關後,你可以調用新的處理程序與handler.run(args),不管它是哪一個。然後

處理程序可以檢查命令行來找出用戶想要什麼。

移動共同的代碼(如加載/保存)到輔助類。保持方法簡短(5-15行)。每種方法都應該做一件事。將複雜任務移動到輔助方法中。

+0

我同意 - 兩個創建/驗證類之間的通用界面將有很大幫助。 –

+0

這聽起來很有用,但我認爲它可能僅僅是一種超出我的知識水平的髮型,而在截止日期前工作並不是真正嘗試新事物的最佳場所。不過謝謝你的提示。 – MikeTheLiar

+0

經過反思/研究,我認爲這或多或少是我在開始時沒有了解處理程序的好處而想要完成的。從本質上講,(如果我正確理解處理程序),我已經把我的類變成了處理程序。再次感謝您的建議,即使我沒有最終使用它,我的確會在未來提供幫助。 – MikeTheLiar