如何创建未知类型的实例?

我有几个函数需要精确的参数类型(又名T ):

 private  void doWork1(T _obj) {...} private  void doWork2(T _obj) {...} private  void doWork3(T _obj) {...} 

我像这样使用它们并且工作正常:

 public void parse(int id) { switch (id) { case 1: { Integer obj = new Integer(1); doWork1(obj); doWork2(obj); doWork3(obj); break; } case 2: { Double obj = new Double(2); doWork1(obj); doWork2(obj); doWork3(obj); break; } case 3: { CustomClass obj = new CustomClass(); doWork1(obj); doWork2(obj); doWork3(obj); break; } } } 

但我想知道是否有可能使代码更简洁,即

 public void parse(int id) { UnknownType obj; switch (id) { case 1: { obj = new Integer(1); break; } case 2: { obj = new Double(2); break; } case 3: { obj = new CustomClass(); break; } } doWork1(obj); doWork2(obj); doWork3(obj); } 

如果是这样我应该放什么而不是UnknownType
编辑:
1)我使用IntegerDouble作为简化示例。 在我的实际代码中,我使用自定义类。
2)我需要知道我的doWork函数中的确切类型(类),所以我不能使用Object
提前致谢

您可以使用NumberObject ,它们都是IntegerDouble常用超类型。


但是,generics是不必要的:

 private  void doWork1(T _obj) {...} 

是完全相同的

 private void doWork1(Object _obj) {...} 

擦除后。

为输入参数设置类型变量的唯一要点是:

  • 您需要指明另一个输入参数的generics需要相关,例如,您正在传递T _objList _list

    请注意,您不需要T _obj1T _obj2的generics类型 – 它会退化为T的上限(例如Object );

  • 如果您需要它与返回类型相关:

      T doWork1(T _obj) { ... } 

你在这里不需要任何一个案例,所以只需删除不必要的复杂function。

用户对象的类型NumberIntegerDouble都扩展了这种类型。

抽象类{@code Number}是表示可转换为基本类型{@code byte},{@ code double},{@ code float},{@ code int},{@的数值的平台类的超类。代码长}和{@code短}。

 public void parse(int id) { Number obj = null; switch (id) { case 1: { obj = new Integer(1); break; } case 2: { obj = new Double(2); break; } } doWork1(obj); doWork2(obj); doWork3(obj); } 

如果你不想这样具体,你可以随时使用Object