【发布时间】:2016-07-22 15:22:21
【问题描述】:
我有几个函数需要精确的参数类型(又名T):
private <T> void doWork1(T _obj) {...}
private <T> void doWork2(T _obj) {...}
private <T> 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) 我使用Integer 和Double 作为简化示例。在我的实际代码中,我使用自定义类。
2) 我需要知道 doWork 函数中的确切类型(类),所以我不能使用 Object
提前致谢
【问题讨论】:
-
如果 doWork1 接受对象,则使用对象。您的问题取决于 doWork1 的参数是如何构造的(重载,或者只是一个函数)。
-
@JFMeier 确实如此,因为
T是无限的。 -
如果需要知道方法中的确切类型,需要将
Class<T>作为参数传递给方法。 -
@AndyTurner,好吧,在这种情况下,
UnknownType呢? -
@StephanLeila 它仍然可以是
Number或Object。
标签: java