将“any”类类型传递给java方法
好吧我说我上课了:
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
使用List而不是ArrayList,因为它提供了更大的灵活性。
你也可以使用List extends CustomClass>
如果所有其他customClasses都从基类型扩展,则List extends CustomClass>
。
第二部分
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
运算符,但我想这对开发人员来说是很多开销并使代码不可读。 仅在需要时使用它。