方法调用中的泛型/通配符类型?

时间:2014-05-23 11:28:56

标签: java generics

我是Java的新手,并尝试创建一个小游戏来学习该语言。目前,我有以下问题:我有一个名为“Task”的类,其属性如“taskName”(字符串),“level”(整数),“propability”(Double)等。

我从文本文件中读取了几个任务,并将它们写入从“ArrayList”扩展的类“TaskList”的对象。作为“TaskList”的方法,我想为列表实现排序和过滤算法(例如“删除3级以下的所有任务”)。

我不想为每个属性编写一个过滤方法,而是编写一个能够过滤每个属性的方法,具体取决于输入。

据我所知,这应该可以使用通用或通配符类型,但我不明白如何正确使用它们。

我的方法头目前看起来像这样:

public TaskList removeTasks(String variableName, String variableValue){

在我的想法中,“variableName”应该始终是一个字符串,但“variableValue”可以是几种类型。我想我可以在方法开头使用开关块来确定如何处理“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);
}
}

1 个答案:

答案 0 :(得分:0)

使用Object作为value的参数类型,是最简单的。

但是使用泛型,可以消除运行时抛出异常的风险。

public <T> TaskList removeTasks(String variableName, T variableValue){}