2

只是想知道你是否能够帮助我解决我的问题。这可能是由于我不知道要搜索的正确关键字造成的。

这不是作业,只是匿名...

我有一个接口和一堆实现类:

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

我有一个水果实用程序类。这是一种采用任何水果并将其切片的方法。

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

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

即我怎样才能自动化:

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) 方法,以便创建与在参数中传递的相同类型的 Fruit(无需覆盖每种类型的方法,或进行 instanceof 检查)

4

2 回答 2

6

首先,我建议放弃引用数组。改为使用List。那么就比较简单了:

public static <T extends Fruit> List<T> slice(T fruit, int pieces)
于 2009-09-03T02:32:08.380 回答
1

或者,您可以使用反射: Array.newInstance(f.getClass(), pieces)

于 2009-09-03T02:42:53.963 回答