检查列表中是否存在特定 class 的实例
Checking if an instance of a specific class exists in a list
好的,很抱歉,如果已经回答了这个问题。我试着寻找,但没有找到答案。
现在,我有一个链接列表实用程序 class(单向链接),其中包含用于不同事物的各种通用实用程序方法。我想要做的是创建一个方法,该方法能够将任何给定 class 的实例作为参数,然后继续检查列表中是否存在此类 class 的实例,返回 true如果是,如果不是,则为 false。该列表本身包含几个不同 classes.
的实例
该方法将与游戏板上 space 的详细内容列表结合使用:如果 space 包含敌人,显示敌人的图标并制作space 无法通行,如果包含物品,则显示物品的图标等等。这里真正重要的是该方法应该能够处理任何和所有 classes,所以我不能使用类似的东西:
if(foo instanceof Enemy)
{
.
.
.
}
这是我最初尝试做的事情:
//这个方法在LinkedList中class
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
是的,这是作业(或者更确切地说,是大作业的一部分)但是老师不会在凌晨两点回答我的google-fu太弱了
请加油
- 纳尔
这个怎么样?
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();
}
如果我正确理解你的问题,那么你需要将 class 传递给你的方法,而不是 class:
的实例
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();
}
那么每个可以放入表示地图的列表的 classes 都应该实现这个接口。例如:
public class Enemy implements MapObject {
@Override
public MapObjectType getType() {
return MapObjectType.ENEMY;
}
}
那你的方法可能更明智:
public boolean hasObjectOfType(MapObjectType type) {
...
if (item.getType().equals(type)) {
return true;
}
...
}
实现instanceof
的动态方法是使用Class.isInstance()
方法:
Determines if the specified Object
is assignment-compatible with the object represented by this Class
. This method is the dynamic equivalent of the Java language instanceof
operator.
所以,alkio(i) instanceof o.getClass()
应该写成o.getClass().isInstance(alkio(i))
。
好的,很抱歉,如果已经回答了这个问题。我试着寻找,但没有找到答案。
现在,我有一个链接列表实用程序 class(单向链接),其中包含用于不同事物的各种通用实用程序方法。我想要做的是创建一个方法,该方法能够将任何给定 class 的实例作为参数,然后继续检查列表中是否存在此类 class 的实例,返回 true如果是,如果不是,则为 false。该列表本身包含几个不同 classes.
的实例该方法将与游戏板上 space 的详细内容列表结合使用:如果 space 包含敌人,显示敌人的图标并制作space 无法通行,如果包含物品,则显示物品的图标等等。这里真正重要的是该方法应该能够处理任何和所有 classes,所以我不能使用类似的东西:
if(foo instanceof Enemy) { . . . }
这是我最初尝试做的事情: //这个方法在LinkedList中class
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
是的,这是作业(或者更确切地说,是大作业的一部分)但是老师不会在凌晨两点回答我的google-fu太弱了
请加油
- 纳尔
这个怎么样?
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();
}
如果我正确理解你的问题,那么你需要将 class 传递给你的方法,而不是 class:
的实例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();
}
那么每个可以放入表示地图的列表的 classes 都应该实现这个接口。例如:
public class Enemy implements MapObject {
@Override
public MapObjectType getType() {
return MapObjectType.ENEMY;
}
}
那你的方法可能更明智:
public boolean hasObjectOfType(MapObjectType type) {
...
if (item.getType().equals(type)) {
return true;
}
...
}
实现instanceof
的动态方法是使用Class.isInstance()
方法:
Determines if the specified
Object
is assignment-compatible with the object represented by thisClass
. This method is the dynamic equivalent of the Java languageinstanceof
operator.
所以,alkio(i) instanceof o.getClass()
应该写成o.getClass().isInstance(alkio(i))
。