有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的工厂模式示例

我尝试了一个工厂模式的例子。这给了我一个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) 个答案

  1. # 1 楼答案

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

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

    使用

    java SolutionFactory Santosh M
    

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

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

  2. # 2 楼答案

    因为这是唯一使用数组的行:

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

    我怀疑您没有提供2个命令行参数。您将需要以下内容:

    $ java com.factory.SalutationFactory Smith M
    
  3. # 3 楼答案

    您必须先检查null或对象,然后才能使用它们。只要加一行就行了

    if (args.length >= 2)
        factory.getPerson(args[0], args[1]);
    /* else 
        Add reminder to provide at least 2 arguments. */
    
  4. # 4 楼答案

    我尝试过同样的例子,在尝试之后,这里是解决方案。创建此代码

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

    这会奏效的

    你的输出应该是“女性”