2

我正在尝试工厂模式中的一个示例。这给了我 ArrayIndexOutOfBoundsException。有人可以解释一下吗?

java.lang.ArrayIndexOutOfBoundsException: 0 at com.factory.SalutationFactory.main(SalutationFactory.java:10) 

这是我的课。

package com.factory;

public class SalutationFactory {

    public static void main(String[] args) {

        try
        {
        SalutationFactory factory = new SalutationFactory();        
        factory.getPerson(args[0], args[1]);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public Person getPerson(String name, String gender){

        if(gender.equals("M"))
            return new Male(name);
        else if(gender.equals("F"))
            return new Female(name);
        else 
            return null;
    }
}

package com.factory;

public class Person {

    private String name;
    private String gender;

    public String getName(){
        return name;
    }

    public String getGender(){
        return gender;
    }

}

package com.factory;

public class Female extends Person {

    public Female(String fullname){
        System.out.println("Hello Ms " + fullname);
    }
}

package com.factory;

public class Male extends Person {

    public Male(String fullname){
        System.out.println("Hello Mr " + fullname);
    }

}

感谢开发

4

4 回答 4

4

由于这是唯一使用数组的行:

 factory.getPerson(args[0], args[1]);

我怀疑您没有提供 2 个命令行参数。你需要类似的东西:

$ java com.factory.SalutationFactory Smith M
于 2012-04-04T11:36:54.327 回答
2
factory.getPerson(args[0], args[1]);

在这里您使用的是命令行参数,因此在运行此应用程序时,您必须传递命令行参数

运行使用

java SolutionFactory Santosh M

这里Santosh将被分配给args[0]M将被分配给args[1]

如果在不传递任何命令行参数的情况下运行该程序,则args 的长度为零,并且在main()内部调用args[0]会导致ArrayIndexOutOfBounds异常

于 2012-04-04T11:37:59.307 回答
0

在使用它们之前,您必须检查 null 或对象。只需添加行

if (args.length >= 2)
    factory.getPerson(args[0], args[1]);
/* else 
    Add reminder to provide at least 2 arguments. */
于 2014-04-03T19:14:34.060 回答
0

我尝试了相同的示例,在这里尝试后是解决方案。创建此代码。

String []pin =new String[4];
    pin[0]="M";
    pin[1]="F";
    Factory factory = new Factory();
    factory.getPerson(pin[0],pin[1]);

这会起作用

你的输出应该是“女性”。

于 2012-05-29T08:28:05.263 回答