How can I return objects of different type from a single function?

时间:2015-06-30 13:50:45

标签: java object return-type

I need to return objects of different classes in a single method using the keyword Object as the return type

public class ObjectFactory {
public static Object assignObject(String type) {

    if(type.equalsIgnoreCase("abc")){
         return new abcClass();
    } else if(type.equalsIgnoreCase("def")) {
         return new defClass();
    } else if(type.equalsIgnoreCase("ghi")) {
         return new ghiClass();
    }
    return null;
    }
}

and in another class I am trying to get the objects as

public class xyz{
public void get(){
    Object obj=(abcClass)ObjectFactory.assignObject("abc");
}
}

How can I access the methods in abcClass using the obj object??

3 个答案:

答案 0 :(得分:1)

Your current code will throw an exception if assignObject returns an instance that is not an abcClass, so you can change the type of obj to absClass :

public void get(){
    abcClass obj=(abcClass)ObjectFactory.assignObject("abc");
}

答案 1 :(得分:1)

我建议您作为初始帖子的评论员之一。也就是说,重构这个以使用接口。

您的类AbcClass,DefClass和GhiClass都可以实现一个接口,我们称之为Letters。然后,您可以使用createLetters方法定义名为LettersFactory的类。此时,我还建议将硬编码字符串标识符更改为枚举。例如:

public enum LetterTypes { ABC, DEF, GHI }

您的工厂方法可以接受此枚举,并且您不必担心获取无效值。工厂方法也可以返回类型字母(接口),并且您有一个更具体的Object版本(这很好)。

最后,如果您需要动态确定这些类型,您可以在Letters(强制所有子项实现它)中定义一个名为getType()的方法,该方法返回已实现的类的LetterTypes枚举。

您还可以使用instanceof运算符来确定您拥有的类。

干杯, 弗兰克

答案 2 :(得分:0)

您可以将其用作参考: -

public Object varyingReturnType(String testString ){
    if(testString == null)
    return 1;
    else return testString ;
} 

Object o1 = varyingReturnType("Lets Check String");
if(  o1 instanceof String) //return true
 String now = (String) o1;
Object o2 = varyingReturnType(null);
if(  o2 instanceof Integer) //return true
 int i = (Integer)o2;

所以类似地,您可以使用自己的条件和instanceof运算符,并可以将其转换为从Object类型获取实际对象类型。