繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM