gpt4 book ai didi

java - 按参数类型?

转载 作者:行者123 更新时间:2023-12-02 08:07:21 26 4
gpt4 key购买 nike

我想知道是否可以在 Java 中通过参数传递类型。

让我更好地解释一下:

假设下一个代码

class Bee {
// Class implementation
}

class Worker extends Bee {
// Class implementation
}


class Queen extends Bee {
// Class implementation
}

现在用我的蜜蜂对象创建一个容器

Vector<Bee> x=new Vector<Bee>();
// ...
for(i=0;i<10;i++)
x.add(new Worker());
// ...
for(i=0;i<10;i++)
x.add(new Queen());

现在我想创建一个通用方法来迭代 vector 并返回具有特定类型的蜜蜂(工蜂或蜂王)的集合。如何做到这一点?

编辑

我试过了

search(x,Worker.class);

static public <T extends Bee> Set<T> search(List<Bee> bees, Class<T> clazz){
// ...
}

并且我收到错误报告“方法搜索(List,Class)不适用于参数(Set,Class)”。问题出在第二个参数上,因为类型不兼容。

最佳答案

从您的编辑来看,您仍在为实现而苦苦挣扎。这是一个工作示例:

public static void main(String[] args) {
Collection<Bee> bees = new ArrayList<Bee>();
bees.add(new Hive.Worker());
bees.add(new Hive.Queen());
Set<Queen> queens = getBeesOfOneType(bees, Queen.class);
}

private static <T extends Bee> Set<T> getBeesOfOneType(Collection<Bee> bees, Class<T> beeType) {
Set<T> result = new HashSet<T>();
for (Bee bee : bees) {
if (beeType.isInstance(bee)) {
// The following cast is safe. The previous if makes sure that
// that bee can be cast to T at this place
T beeTypeInstance = beeType.cast(bee);
result.add(beeTypeInstance);
}
}
return result;
}

仍然存在一个类型安全警告,并且我很确定这个警告无法消除。编译器现在不知道我们只选择 T 类型蜜蜂,因此它必须警告我们。

关于java - 按参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3257188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com