我有几个函数需要精确的参数类型(又名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
提前使用谢谢
您可以使用Number
或者Object
,这是双方共同的超类型Integer
和Double
。
但是,泛型是不必要的:
private <T> void doWork1(T _obj) {...}
等同于
private void doWork1(Object _obj) {...}
删除后。
对于输入参数具有类型变量的唯一要点是:
T _obj
和List<T> _list
。请注意,尽管您并不需要泛型类型,T _obj1
并且T _obj2
-会退化为T
(例如Object
)的上限;
<T> T doWork1(T _obj) { ... }
您在这里不需要任何一种情况,因此只需删除不必要的复杂性即可。
问题内容: 我有一个我必须验证问题值的对象,这些对象的某些属性是自定义对象的数组。这样一来,这将涉及到数组的各个元素。为每个元素执行吸气剂,例如: 这是我需要达到的。我已使用带有属性列表的枚举以以下方式提取了数据。 致电: 我将使用数组中不同类型和不同值的多个数组。我想创建一个如下的方法。 这给了我多个错误,这些错误主要与repeatingGrp []有关。数组类型应与枚举名称相同。是否可以创建这
问题内容: 在iOS 10 Swift 3中从图像选择器中选择图像时,出现错误- 没有选择和更新图像。我需要帮助或建议,以了解有关此方法的语法或任何内容在iOS10或Swift 3中是否已更改,或者是否有其他方法可以执行。 问题答案: 下面提到的代码确实为我解决了问题-
问题内容: 如何创建泛型类型的数组?通用方法如何工作?它返回通用数组的副本。因此可以创建通用数组。但是如何?怎么能写一个类似的方法呢? 问题答案: 如果需要在运行时创建它,则至少需要在此时知道类型,因此可以使用以下方法: where 是泛型类型,是的类,并且是初始大小。 这里的文件
问题内容: 我尝试运行以下代码。顺便说一句,我是python和sklearn的新手。 其中y是0和1的np.ndarray 我收到以下信息: 文件“ C:\ Anaconda3 \ lib \ site-packages \ sklearn \ linear_model \ logistic.py”,行> 1174,适合check_classification_targets(y) 文件“ C:\
问题内容: 我正在创建一个类及其子类,需要在其中调用父级的静态方法以返回子级实例。 问题答案: 该静态方法被调用,其值是类对象,子类,你把它称为后的构造。因此,您可以使用实例化它:
问题内容: 是否可以在Java中创建泛型类型的实例?我正在根据我所看到的答案进行思考no(由于类型擦除),但是如果有人能看到我所缺少的内容,我将很感兴趣: 编辑:事实证明,超级类型令牌可以用于解决我的问题,但是它需要很多基于反射的代码,如下面的一些答案所示。 问题答案: 你是对的。你做不到。但你可以将其更改为 但这有效。以工厂模式包装它会使它更具容忍性。