在匿名类上使用方法

时间:2011-10-27 12:59:49

标签: java class anonymous

我正在试图弄清楚我想做的事情是否可行。我环顾四周,谷歌并没有超级帮助,至少在这种特殊情况下。

这就是我想要做的。我正在处理的赋值被设计为从命令行多次运行,有两组可能的参数:[“CREATE”“cardType”]或[“VERIFICATION”“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);

        }

所以,这就是我想弄清楚的。下一步是“验证”标志。如果从命令行传递验证标志,我需要进入文件,读出存储在其中的数据,进行任何更改,然后将其写回文件。再说一遍,到目前为止还可以。这是问题所在:

由于没有该类的实例,我无法在类中调用方法。但是,Verification方法不需要类的实例来完成它的工作 - 它完全处理命令行参数,以及读取/写入文件。那么,我怎样才能匿名调用类中的方法呢?我是否必须创建另一个Verification类,或者只是将方法移动到我的主类中?我对其中任何一个都有点犹豫,因为赋值意味着应该有一个类来处理创建和验证。或者,另一种可能性是,我接近这个问题的逻辑是否有缺陷?

此代码正在进行中 - 异常将变得更加具体,任何打开的文件流都将被关闭等。

2 个答案:

答案 0 :(得分:3)

一个首字母缩略词:KISS

是的,你可以做各种魔术,通过反射调用方法等等。但为什么要这么麻烦?

创建一个main方法,该方法接受第一个参数并创建CreateHandlerVerificationHandler。两者都实现了具有此方法的Handler接口:

 void run(String[] args);

因此,在切换之后,您可以使用handler.run(args)调用新处理程序,无论它是哪一个。

然后,处理程序可以检查命令行以找出用户想要的内容。

将公共代码(如加载/保存)移动到帮助程序类中。保持方法简短(5-15行)。每种方法都应该做一件事。将复杂的任务移动到辅助方法中。

答案 1 :(得分: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) {

   }
   ...
}