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??
答案 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
类型获取实际对象类型。