簡體   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