将“any”类类型传递给j​​ava方法

好吧我说我上课了:

public class ExampleClass() { public void exampleClassMethod(ArrayList 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; } 

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

任何ArrayList

 public void example( ArrayList arr ) { ... 

任何类型的CustomClass

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

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

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

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

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

 public void exampleClassMethod2(List custClassArg) { .... } 

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

你也可以使用List 如果所有其他customClasses都从基类型扩展,则List

第二部分

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

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

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