传入"任何"类类型转换为java方法

时间:2014-07-09 00:58:47

标签: java class methods

好的我说我上课了:

public class ExampleClass() {
    public void exampleClassMethod(ArrayList<CustomClass> abcdefg> arrList) {
        ....
    }
    public void exampleClassMethod2(ArgumentToTakeInAnyCustomClass custClassArg) {
        ....
    }
}

现在我希望能够将任何对象的任何数组列表传递到该类中的该方法中。

假设我传入的自定义类是CustomClass1,CustomClass2,CustomClass3。

我如何设置该方法来接受我传入的任何ArrayList?另外,假设我只想传递其中一个类,就像在第二个示例方法中一样,我该怎么做?

感谢。

public void testerMethodInitiater() {
    CustomClass1 abc = new CustomClass1();
    tester((Object) abc);
}
public static void tester(Object abc) {
    //do stuff
    System.out.println(abc);
    if(abc instanceof CustomClass1) {
        System.out.println("This is a CustomClass1");
    }
    (I need to tell the program to create a new CustomClass1 here if it's a CustomClass1) tester;// = new Object<Universalvars.getClassInUse()>;

}  

上面的代码打印出该对象是CustomClass1的一个实例,但是我不知道如何在这个时候创建​​一个新的CustomClass1,除非我做了一个条件语句命名所有可能发生的事情,我正在尝试避免。

3 个答案:

答案 0 :(得分:1)

任何ArrayList

public void example( ArrayList<?> arr ) { ...

任何类型的CustomClass

public void example( ArrayList< ? extends CustomClass> arr ) { ...

编辑:对于问题的后半部分,您可以使用反射创建任何类型的新对象:

public void tester( Object obj ) {
  Object obj2 = obj.getClass().newInstance();
}

这要求Object的类具有零参数构造函数。我不知道你为什么要这样做。您可能希望实现clone(),或者您可能希望在所有这些结束时更多地考虑您的真实目标。通常在CustomClass中添加多态方法可以解决这些问题,我可以使用哪个类&#34;输入问题。

答案 1 :(得分:0)

使用List<Object>接受方法中的任何List对象。

public void exampleClassMethod2(List<Object> custClassArg) {
    ....
}

使用List而不是ArrayList,因为它提供了更大的灵活性。

如果所有其他customClasses都从基本类型扩展,您也可以使用List<? extends CustomClass>

答案 2 :(得分:0)

第二部分

1)tester(Object s)方法将接受所有类型的对象,因为Java中的任何Object内部都继承自java.lang.Object。所以tester((Object) abc);根本不需要。

2)使用CustomClass1 custom = (CustomClass1)abc对CustomClass1进行类型转换。我希望它有效。

3)你可以使用instanceOf运算符,但我想这对于开发人员而言是很多开销。使代码不可读。仅在需要时使用它。