返回子类

时间:2014-10-04 19:37:37

标签: java generics inheritance

我的问题很简单,但我无法弄清楚如何实现我想要的东西。

我想实现一个方法,根据给定的参数,返回一个或另一个子类(我知道我可以在某个类中有这种行为,使开发更加面向对象,但我还在学习)

所以我想到了这个解决方案,但它没有编译。

public abstract class A(){
    //some code
}

public class B extends A(){
    //some code
}

public class c extends A(){
    //some code
}

public static void main(String[] args) {
    System.out.println("input: "); 
    Scanner console = new Scanner(System.in); 
    String input=console.nextLine();
    A myObject = getObject(input);

}

public static <? extends A> getObject(String input){
    if(input.indexOf("b") != -1){
        return new B();
    }
    if(input.indexOf("c") != -1){
        return new C();     
    }
    return null;
}

2 个答案:

答案 0 :(得分:2)

首先,您需要从类定义中删除括号(()):

public abstract class A {
    //some code
}

public class B extends A {
    //some code
}

public class C extends A {
    //some code
}

其次,getObject应该返回A

public static A getObject(String input){
    if(input.indexOf("b") != -1){
        return new B();
    }
    if(input.indexOf("c") != -1){
        return new C();
    }
    return null;
}

答案 1 :(得分:1)

在您的示例中,我认为不需要使用泛型。您的方法只需返回A

public static A getObject(String input){
    if(input.indexOf("b") != -1){
        return new B();
    }
    if(input.indexOf("c") != -1){
        return new C();     
    }
    return null;
}