[英]generic/wildcard types in method call?
我对Java还是很陌生,因此尝试创建一个小游戏来学习该语言。 当前,我遇到以下问题:我有一个名为“ Task”的类,具有“ taskName”(String),“ level”(Integer),“ propability”(Double)等属性。
我从一个文本文件中读取了几个任务,并将它们写入从ArrayList扩展的“ TaskList”类的对象中。 作为“ TaskList”的方法,我想为列表实现排序和过滤算法(例如“删除3级以下的所有任务”)。
我宁愿不为每个单个属性编写一个过滤器方法,而是编写一个能够根据输入来过滤每个属性的方法。
据我所知,这应该可以通过使用通用或通配符类型来实现,但我不知道如何正确使用它们。
我的方法头现在看起来像这样:
public TaskList removeTasks(String variableName, String variableValue){
在我的想法中,“ variableName”应始终为字符串,但“ variableValue”可以为几种类型。 我以为我可以在方法开始时使用switch块来确定如何处理“ variableValue”。 例如:
switch(variableName)
case "taskName":
[Code]
case "level":
[Code]
[...]
所以目前,我的问题是:怎么说Java,“ variableValue”可以是几种类型?
如果您还有其他建议解决我的问题,那也可以。 就像我说过的那样,我对Java并不是很有经验。
编辑:我尝试了NimChimpsky提出的语法,并且可以在第一个实例中使用,但是在下面,我遇到了一个新问题。 当我检查“ variableValue”是否等于当前Task的属性时,出现“不兼容的操作数类型int和T”错误。 我该如何预防?
程式码片段:
switch(variableName){
case "level":
for (int i = 0; i<size; i++){
currentTask = this.get(i);
if (currentTask.getLevel() == variableValue)
this.remove(i);
}
}
使用Object作为值的参数类型,是最简单的。
但是,使用Gernerics可以消除运行时强制转换异常的风险。
public <T> TaskList removeTasks(String variableName, T variableValue){}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.