gpt4 book ai didi

Java:在运行时将类作为参数传递

转载 作者:行者123 更新时间:2023-11-29 07:46:02 25 4
gpt4 key购买 nike

我正在编写一种游戏引擎。我的所有对象都扩展自 GameObject 类。我需要能够检查一个对象是否正在接触另一个对象,并指定类型。因此我的代码是:

public boolean collidesWith(GameObject caller, Class collideType) {
for( /* the array of all GameObjects */ ) {

// only check against objects of type collideType
// this line says "cannot find symbol: collideType"
if(gameObjects[i] instanceof collideType) {
// continue doing collision checks
// return true in here somewhere
}
else continue;
}
return false;
}

我无法理解的是如何将 BouncyBall 之类的东西传递给 collidesWith()。理想情况下,我不想为每次调用 collidesWith() 创建一个实例,但如果我绝对必须,我可以使用它。

这里有大量的问题和答案都处理了一些愚蠢的事情,比如:

  • 是否适合使用instanceof
  • 我是否想及格
  • 我是否真的想要通过一门课

我需要使用反射吗?我必须获取类名并将其与 equals() 进行比较吗?是否需要创建实例?

最佳答案

instanceof 运算符需要类的文字名称。例如:

if(gameObjects[i] instanceof BouncingBall) {

因为你希望它是动态的,你必须使用 Class.isInstance() 方法,它检查它的参数是否是调用该方法的 Class 对象的实例:

public boolean collidesWith(GameObject caller, Class<? extends GameObject> collideType) {
for ( /* the array of all GameObjects */ ) {
if(collideType.isInstance(gameObjects[i])) {
// continue doing collision checks
// return true in here somewhere
}
else continue;
}
return false;
}

您可以调用该方法,例如:

collidesWith(caller, BouncingBall.class)

关于Java:在运行时将类作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25710778/

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