代码之家  ›  专栏  ›  技术社区  ›  masher

如何实例化(在方法内部)实现同一接口的不同类?

  •  2
  • masher  · 技术社区  · 15 年前

    只是想知道你能否帮我解决问题。这可能是因为我不知道要搜索的关键字。

    这不是作业,只是匿名…

    我有一个接口和一系列实现类:

    interface Fruit
    Banana implements Fruit  
    Apple implements Fruit  
    ....
    

    我有一门水果实用课。在这个方法中,任何种类的水果都可以切片。

    public static Fruit[] slice(Fruit f, int pieces)
    

    如何将水果数组声明为与传递给方法的水果相同的类型?

    ie如何实现自动化:

    Fruit[] a = new Apple[pieces];  
    

    如果我给它一个苹果?

    是的。

    编辑:澄清

    我要这样的代码:

    Fruit a = new Apple();
    Fruit b = new Banana();
    Fruit[] slices1 = FruitUtil.slice(a, 3); //slices1 should be an Apple
    Fruit[] slices2 = FruitUtil.slice(b, 3); //slices2 should be a Banana
    Fruit newApple = FruitUtil.copy(a); //newApple should be an Apple
    

    如何编写slice(fruit f,int slice)或copy(fruit f)方法,以便创建与传入参数相同类型的水果(不必为每个类型重写方法,也不必执行instanceof检查)

    2 回复  |  直到 15 年前
        1
  •  6
  •   Tom Hawtin - tackline    15 年前

    首先我建议放弃引用数组。使用 List 相反。那就相对简单了:

    public static <T extends Fruit> List<T> slice(T fruit, int pieces)
    
        2
  •  1
  •   Timothy Pratley    15 年前

    或者,可以使用反射: array.newInstance(f.getClass(),个)