Okay say I have a class:
public class ExampleClass() {
public void exampleClassMethod(ArrayList abcdefg> arrList) {
....
Use List<Object> to accept any List object in the method.
public void exampleClassMethod2(List<Object> custClassArg) {
....
}
use List instead of ArrayList as it give more flexibility.
Also you can use List<? extends CustomClass> if all the other customClasses extends from a base type.
For the second part
1)tester(Object s) method will accept all Types of Object because any Object in Java internally inherits from java.lang.Object. So tester((Object) abc); not required at all.
2)Typecast abc to CustomClass1 using CustomClass1 custom = (CustomClass1)abc. I hope it works.
3)You can use instanceOf operator but I guess this is lot of overhead for the developer & makes the code unreadable. Use it only if required.
Any ArrayList:
public void example( ArrayList<?> arr ) { ...
Any type of CustomClass:
public void example( ArrayList< ? extends CustomClass> arr ) { ...
Edit: For the second half of your question, you can create a new object of any type with reflection:
public void tester( Object obj ) {
Object obj2 = obj.getClass().newInstance();
}
This requires that the class of Object has a zero-argument constructor. I don't know why you'd want to do this however. You might want to implement clone() instead, or you might want to think a little more about your real goal at the end of all this is. Usually adding a polymorphic method to CustomClass solves these "what class do I have" type questions.