Java 从ArrayList获取特定类

Java 从ArrayList获取特定类,java,arraylist,Java,Arraylist,我正在进行一个项目,在这个项目中,我需要向ArrayList添加大量对象,然后在以后调用其中的特定函数。我已经关闭了这个部分,但在我的程序中,我需要从ArrayList访问特定实例,只使用我要查找的类的参数。 例如: public class Manager { public static ArrayList<O> loadedHacks = new ArrayList<O>(); public void initOs(){ loadedH

我正在进行一个项目,在这个项目中,我需要向ArrayList添加大量对象,然后在以后调用其中的特定函数。我已经关闭了这个部分,但在我的程序中,我需要从ArrayList访问特定实例,只使用我要查找的类的参数。 例如:

public class Manager {
    public static ArrayList<O> loadedHacks = new ArrayList<O>();
    public void initOs(){
        loadedHacks.add(new O());
    }
}

public class O {
    public boolean enabled = false;
    public void onEnable(){}
}

public class A extends O{
}

从你的问题中不清楚你要解决的实际问题是什么,但如果我理解正确,你要做的是说:“对象X可能是类A的某个子类。如果它是子类B,那么我想调用B.method(),它不是在A上定义的”

在这种情况下,您可以执行以下操作:

if(Helper.get(A.class).enabled){}
if (object instanceof SpecificSubclass) {
  SpecificSubclass specificObject = (SpecificSubclass) object;
  specificObject.specificMethod();
}

编辑:从您的评论来看,您正在寻找的功能似乎略有不同。如果您有一个类作为参数,那么要查看某个特定对象是否实际上是该类的实例,请使用Class.isAssignableFrom()方法。

如果我理解正确,您必须迭代ArrayList,并将作为类对象的参数与数组中getClass()的返回类型进行比较,获取对象并返回它。因为getClass()方法返回的是对象的类类型,而不是引用。

我已经回答了您提出的问题,但您最好尝试澄清您是如何提问的!例如,您提到了ArrayList,但在示例代码中没有提到任何ArrayList,它应该会暴露您试图解决的问题……基本上,我的问题是在方法getHack中我会做什么?如何只扫描ArrayList中我给出的参数?好的,用英语的话来说,你希望getHack()方法实际做什么?我编辑了代码,使它更清晰一些。getHack()应该能够接收一个类作为其参数,然后通过ArrayList loadedHacks查找相同的类并返回它。好的,我已经编辑了我的答案。基本上,您需要从(obj.getClass())调用clz.isAssignableFrom。不过,我还没有完全确定ArrayList是否适合实际问题。public Hack getHack(Class hackClass){for(Hack h:loadedHacks){if(hackClass.getClass().equals(h.getClass()){return h;}return null;}equals将比较对象引用,所以我不确定它是否会这样工作。但是,如果两者都是类类型的实例,并且必须返回相同的字符串,则可以将两者的toString()与equals进行比较。但不要使用ready类参数的getClass(),您应该这样比较:
hackClass.toString()==h.getClass().toString()
或者类似的东西:
h.getClass().isAssignableFrom(hackClass)