我正在试图弄清楚我想做的事情是否可行。我环顾四周,谷歌并没有超级帮助,至少在这种特殊情况下。
这就是我想要做的。我正在处理的赋值被设计为从命令行多次运行,有两组可能的参数:[“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类,或者只是将方法移动到我的主类中?我对其中任何一个都有点犹豫,因为赋值意味着应该有一个类来处理创建和验证。或者,另一种可能性是,我接近这个问题的逻辑是否有缺陷?
此代码正在进行中 - 异常将变得更加具体,任何打开的文件流都将被关闭等。
答案 0 :(得分:3)
一个首字母缩略词:KISS:
是的,你可以做各种魔术,通过反射调用方法等等。但为什么要这么麻烦?
创建一个main方法,该方法接受第一个参数并创建CreateHandler
或VerificationHandler
。两者都实现了具有此方法的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) {
}
...
}