通过泛型限制类型参数

时间:2019-05-21 07:06:44

标签: java generics

给出Calorie接口和实现的类

// Interface that defines that item has calories and may be compared by it

interface Calorie extends Comparable<Calorie> {
  public int compareTo(Calorie object);
  public int getCalories();
}

// Examples of classes CaloryGrader is supposed to work with
class Drink implements Calorie {
    // Some implemenation...
}

class Bakery implements Calorie {
    // Some implementation...
}

class Cake extends Bakery {
    // Some implementation...
}


## Given CaloryGrader class where I need to implement sorted static "grade" method ##

class CaloryGrader {

    /**
     * Returns sorted in ascending order copy of items list.
     * 
     * Sort order is defined by item calories.
     *
     * @param items collection of items to sort
     * @return sorted copy
     */

    public List grade(List items) {
        // Add implementation
    }

}

任务是-通过泛型编写成绩,以便仅对包括卡路里及其子类的项目列表进行排序。

我已经写了以下评分方法的签名

  public static <T extends Calorie> List<T> grade(List<T> items) {

仍然,它不起作用,我不知道为什么。

T 是一种方法可以接受的项目类型 列表是方法的返回类型

我假设参数 List 将限制只能通过卡路里的所有子类传递给方法的List。但这是不正确的。

我可以创建原始类型的列表并将其传递给该方法。我认为这是由于它可以转换为List并且适合。

解决方案应该是不将原始类型传递给方法并接收编译时错误。我想我想念什么。

1 个答案:

答案 0 :(得分:0)

您可以将数组用于此硬约束:等级(T []个项目)

最重要的是,一个数组支持的List用于来回快速转换。