确定父类的对象的子类类型

时间:2013-06-08 23:50:27

标签: java class oop object instanceof

我有这个问题,我的代码中有几个部分,我检查是否满足这些条件,以便我能理解我检查的是一种类型还是另一种。这最终变得很大,如果是其他树,因为我正在进行大量的检查,每个方法中的相同检查,并且我正在检查的事物有几种不同的类型。这个我知道可以使用对象解决! 具体来说,我正在检查的是来自文件的4个字符串值。根据这些字符串值,4个字符串可以组成3种类型中的一种。每次我需要获得4个字符串组成的类型时,我不想进行相同的检查,我想知道是否可以在给定这4个字符串的情况下创建一个通用对象,然后确定该对象是否是特定类1,2的实例,或3.然后我就可以将该一般对象转换为特定对象。

假设我将4个字符串创建的一般对象命名为Sign。我将采用这4个字符串并创建一个新的Sign对象:

Sign unkownType = new Sign(string1, string2, string3, string4);

我需要检查这个标志的特定类型的标志。

编辑: 更多细节,我正在检查的标志不是像“+”或“ - ”这样的符号,它们是带有文字的标志,就像你在路上看到的那样。每个符号上有4行,需要检查它们以查看每行是否符合特定类型的符号。 SignType1的第一行与SignType2的第一行不同,我想取这4行(Strings)并将它传递给一个对象,并在我的代码中使用该对象从中获取值而不是相同检查每种方法。 如果你想让我展示一些代码,我可以,但它没有多大意义。

2 个答案:

答案 0 :(得分:2)

您似乎要求的是工厂模式

public interface ISign {
    public void operation1();
    public void operation2();

}

和一个Factory类,用于根据输入

生成类
public class SignGenerator {
    public static ISign getSignObject(String str1,String str2, String str3, String str4) {
        if(str1.equals("blah blah"))
           return new FirstType();
        if(str1.equals("blah blah2") && str2.equals("lorem ipsum"))
           return new SecondType();
        return new ThirdType();
    }
}

public class FirstType implements ISign {
}

public class SecondType implements ISign {
}

public class ThirdType implements ISign {
}

在这些类中实现所有类型特定的逻辑,这样您就可以调用它们而无需先检查大量的if..else子句

答案 1 :(得分:0)

从我的陈述中收集到的。 说:如果给定的字符串等于您指定的whateva值,则创建返回某个对象的方法

    //provided the objects to be returned are subtypes of Sign
    public Sign getInstance(String first, String second, String third, String fourth)
    {

        if(first==null || second==null || third==null || fourth===null )
            return null;

      if(compare1.equals(first))
       return new SignType1();
      else
      if(compare2.equals(second))
       return new SignType2();
      else  
      if(compare3.equals(third))
       return new SignType3();
      else
      if(compare4.equals(fourth))
       return new SignType4();

    }

上面的代码检查并返回与传递的字符串对应的appropriet实例 希望这是你的关注