Java 如何创建未知类型的实例?
我有两个函数需要精确的参数类型(akaJava 如何创建未知类型的实例?,java,Java,我有两个函数需要精确的参数类型(akaT): 但我想知道是否有可能使代码更简洁,即 public void parse(int id) { UnknownType obj; switch (id) { case 1: { obj = new Integer(1); break; } case 2: { obj = new Double(2);
T
):
但我想知道是否有可能使代码更简洁,即
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) 我使用了
Integer
和Double
作为简化示例。在我的实际代码中,我使用自定义类。2)我需要知道我的
doWork
函数中的确切类型(类),这样我就不能使用对象
提前感谢用户为您的obj
输入号码Integer
和Double
都扩展了此类型
抽象类{@code Number}是平台的超类
表示可转换为
基元类型{@code byte}、{@code double}、{@code float}、{@code
int}、{@code long}和{@code short}
如果您不想成为这样具体的对象,您可以始终使用对象
为您的对象
使用类型编号
Integer
和Double
都扩展了此类型
抽象类{@code Number}是平台的超类
表示可转换为
基元类型{@code byte}、{@code double}、{@code float}、{@code
int}、{@code long}和{@code short}
如果您不想成为这样的具体对象,您可以始终使用对象
您可以使用数字
或对象
,它们都是整数
和双
的常见超类型
但是,泛型是不必要的:
private <T> void doWork1(T _obj) {...}
擦除之后
输入参数具有类型变量的唯一要点是:
- 您需要指出另一个输入参数的泛型需要关联,例如,您正在传递
T\u obj
和List\u List
请注意,您不需要t_obj1
和t_obj2
的泛型类型-这会退化为t
的上限(例如Object
)
- 如果您需要它与返回类型相关:
<T> T doWork1(T _obj) { ... }
tdowork1(T_obj){…}
这里不需要任何一种情况,所以只需消除不必要的复杂情况。您可以使用Number
或Object
,它们都是Integer
和Double
的常见超类型
但是,泛型是不必要的:
private <T> void doWork1(T _obj) {...}
擦除之后
输入参数具有类型变量的唯一要点是:
- 您需要指出另一个输入参数的泛型需要关联,例如,您正在传递
T\u obj
和List\u List
请注意,您不需要t_obj1
和t_obj2
的泛型类型-这会退化为t
的上限(例如Object
)
- 如果您需要它与返回类型相关:
<T> T doWork1(T _obj) { ... }
tdowork1(T_obj){…}
这里不需要任何一种情况,所以只需消除不必要的复杂情况。如果doWork1接受object,请使用object。你的问题取决于doWork1的参数是如何构造的(重载的,或者只是一个函数)。@JFMeier确实如此,因为T
是无界的。如果你需要知道方法中的确切类型,你需要将Class
作为参数传递给方法。@AndyTurner,好的,在这种情况下,UnknownType
如何?@StephanLeila它仍然可以是Number
或Object
。如果doWork1接受Object,则使用Object。你的问题取决于doWork1的参数是如何构造的(重载的,或者只是一个函数)。@JFMeier确实如此,因为T
是无界的。如果你需要知道方法中的确切类型,你需要将Class
作为参数传递给方法。@AndyTurner,好的,那么在这种情况下,UnknownType
呢?@StephanLeila如果使用第一个示例,它仍然可以是Number
或Object
@StephanLeila如何知道doWork
中的类型?如果使用第一个示例,StephanLeila如何知道doWork
中的类型?谢谢澄清。是的,Object
就可以了,非常感谢您的澄清。是的,Object
就可以了,非常感谢
private void doWork1(Object _obj) {...}
<T> T doWork1(T _obj) { ... }