gpt4 book ai didi

java - instanceof Class 参数

转载 作者:太空狗 更新时间:2023-10-29 22:31:44 25 4
gpt4 key购买 nike

我正在尝试编写一个方法来返回与它作为参数获取的类匹配的所有对象:

public class Scenario extends View {

...

private Actor[] actors = new Actor[1024];

...

public Actor[] getActors(Class<?> cls) {
//Count actors corresponding to class cls
int cnt = 0;
for (int i = 0; i<actorsCount; i++)
if (actors[i] instanceof cls) cnt++;


//Build a new array;
Actor[] clsActors = new Actor[cnt];

//Fill it
for (int j = 0, k=0; j<cnt; k++)
if (actors[k] instanceof cls)
clsActors[j++] = actors[k];

return clsActors;
}
}

但是,我收到一个错误:"- 不兼容的操作数类型 boolean 和 Class<capture#1-of ? extends Scenario>"

'Actor' 由我的 Sprite 扩展,比如 Bird、Hero 等。例如,这个想法是在给定时间获取场景中所有鸟类的列表以进行某些计算。

知道这里发生了什么吗?如何测试给定对象是否是给定类的实例?

最佳答案

import java.util.Arrays;

public class Main
{
static class Actor {}
static class Frog extends Actor {@Override public String toString() {return "I'm a frog";}}
static class Lizard extends Actor {@Override public String toString() {return "I'm a lizard";}}

private static Actor[] actors;

public static Actor[] getActors(Class<?> cls) {
//Count actors corresponding to class cls
int cnt = 0;
for (int i = 0; i<actors.length; i++)
if (cls.isInstance(actors[i])) cnt++;

//Build a new array;
Actor[] clsActors = new Actor[cnt];

//Fill it
for (int j = 0, k=0; j<cnt; k++)
if (cls.isInstance(actors[k]))
clsActors[j++] = actors[k];

return clsActors;
}

public static void main(String[] args)
{
actors = new Actor[] {new Frog(), new Lizard()};
System.out.println(Arrays.toString(getActors(Frog.class)));
}
}

输出:

[I'm a frog]

编辑:使用列表的更优雅的 getActors() 版本:

    public static Actor[] getActors(Class<?> cls) {
LinkedList<Actor> chosenActors = new LinkedList<Actor>();
for(Actor actor: actors) if(cls.isInstance(actor)) chosenActors.add(actor);
return chosenActors.toArray(new Actor[0]);
}

关于java - instanceof Class<?> 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13308102/

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