2012-04-04 55 views
2

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

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); 
    } 

} 

感谢 开发

+1

请发布您的异常堆栈跟踪! – 2012-04-04 11:36:13

+2

您是否传递了命令行参数? – PhyBandit 2012-04-04 11:38:00

+0

java.lang.ArrayIndexOutOfBoundsException:0 \t at com.factory.SalutationFactory.main(SalutationFactory.java:10) – dsmishra1981 2012-04-04 11:42:34

回答

4

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

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

我怀疑你不是提供2个命令行参数。你会需要这样的东西:

$ java com.factory.SalutationFactory Smith M 
+0

java.lang.ArrayIndexOutOfBoundsException:0 \t at com.factory.SalutationFactory.main(SalutationFactory.java:10)这是堆栈跟踪。顺便说一句,我使用日食。所以当我运行时,控制台窗口不显示。那么我会在哪里配置我的cmd行参数? – dsmishra1981 2012-04-04 11:40:11

+1

在Eclipse中检查运行配置。应该有参数选项卡。提供空间分隔值。顺便说一句,这是不同的问题。 – 2012-04-04 11:42:59

+0

试图运行配置 - >参数选项卡。这里有两件事。程序参数和VM参数。我将如何将它设置为空格分隔值? – dsmishra1981 2012-04-04 11:49:19

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

在这里,您使用的命令行参数,所以在运行这个应用A您使用通过命令行参数

运行

java SolutionFactory Santosh M 

Here Santosh将被分配到args [0]M将被分配到ARGS [1]

如果不经过任何命令行参数,运行该程序,然后长度ARGS将是和内部主()您呼叫args [0]其中导致ArrayIndexOutOfBounds异常

+0

是的钱德拉,thas正确。但我正在使用eclipse。正如Hardik所说,我需要配置一下eclipse。 – dsmishra1981 2012-04-04 11:50:51

+0

当然可以。您需要配置eclipse IDE的运行环境。 – 2012-04-04 11:56:23

0

我已尝试相同的示例,并尝试此处后解决方案。创建此代码。

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

这将工作

和你放出来应该是 “女”。

0

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

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