好的,如果已经回答,请道歉。我试着看,但我找不到答案。
现在,我有一个链表实用程序类(在一个方向链接),其中包含用于不同事物的各种通用实用程序方法。我要做的是创建一个方法,它能够将参数作为任何给定类的实例,然后继续检查列表中是否存在此类的实例,如果是,则返回true,如果是,则返回false没有。列表本身包含几个不同类的实例。
该方法将与详细说明游戏板上空间内容的列表结合使用:如果空间包含敌人,则显示敌人的图标并使空间无法通行,如果它包含一个项目,则显示项目的图标等等。这里真正的踢球者是该方法应该能够处理任何和所有类,所以我不能使用像:
if(foo instanceof Enemy) { 。 。 。 }
这是我最初尝试做的事情: //此方法位于LinkedList类
中public boolean exists(Object o)
{
int i = 0;
boolean output = false;
//koko() returns the size of the linked list
while(i < koko() && !output)
{
//alkio(i) returns an Object type reference to the entity in index i
if(alkio(i) instanceof o.getClass())
{
output = true;
}
}
return output;
}
但结果如下:https://www.dropbox.com/s/5mjr45uymxotzlq/Screenshot%202016-04-06%2001.16.59.png?dl=0
是的,这是一个家庭作业(或者更确切地说,是大作业的一部分),但老师不会在凌晨两点回答而且我的谷歌太弱了。
halp plz
答案 0 :(得分:1)
instanceof
的动态方式是使用Class.isInstance()
方法:
确定指定的
Object
是否与此Class
所代表的对象分配兼容。此方法是Java语言instanceof
运算符的动态等效项。
因此,alkio(i) instanceof o.getClass()
应写为o.getClass().isInstance(alkio(i))
。
答案 1 :(得分:0)
这个怎么样?
public static void main(String[] args)
{
Integer myInt = 1;
System.out.println(exists(Arrays.asList(1, 2, 3), myInt)); //true
System.out.println(exists(Arrays.asList("1", "2", "3"), myInt)); //false
}
/**
* Returns whether an object exists in @list that is an instance of the class of object @o.
*/
public static boolean exists(List<?> list, Object o)
{
return list == null || o == null ? false : list.stream().filter(o.getClass()::isInstance).findAny().isPresent();
}
答案 2 :(得分:0)
如果我理解你的问题,那么你需要将类传递给你的方法,而不是类的实例:
public boolean exists (Class checkClass) {
...
if (item.getClass().equals(checkClass)) {
return true;
}
...
}
然后将其称为:
if (myList.exists(Enemy.class)) {
...
}
但是你应该考虑一个不同的模型,因为这显示了一些相当差的面向对象设计。更好的方法是使用interface
表示可以在地图上显示的所有内容。类似的东西:
public enum MapObjectType {
ENEMY, ALLY, WALL;
}
public interface MapObject {
MapObjectType getType();
}
然后,可以放入代表地图的列表中的每个类都应该实现此接口。例如:
public class Enemy implements MapObject {
@Override
public MapObjectType getType() {
return MapObjectType.ENEMY;
}
}
然后你的方法可能更明智:
public boolean hasObjectOfType(MapObjectType type) {
...
if (item.getType().equals(type)) {
return true;
}
...
}