通用参数可重用性

Dav*_*iel 1 java generics java-8

我有两种不同的方法

public static void printRoutes(List<Optional<String>> routes) {
    for (int i = 0; i < routes.size(); i++) {
        if(routes.get(i).isPresent()) {
            System.out.println("Output #" + (i+1) + ": "+routes.get(i).get());
Run Code Online (Sandbox Code Playgroud)

public static void printRoutes(List<Optional<Integer>> routes) {
    for (int i = 0; i < routes.size(); i++) {
        if(routes.get(i).isPresent()) {
            System.out.println("Output #" + (i+1) + ": "+routes.get(i).get());
Run Code Online (Sandbox Code Playgroud)

如您所见,它们基本相同,但参数类型相同。由于我只是打印它们,所以使用“ .toString()”方法,我认为应该有一种对两者使用相同方法的方法。

我尝试过

public static void printRoutes(List<Optional<T super Object>> lengths) 
Run Code Online (Sandbox Code Playgroud)

public static void printRoutes(List<Optional<T extends Object>> lengths) 
Run Code Online (Sandbox Code Playgroud)

但这是行不通的,有办法吗?否则您将无法使用泛型。

Jes*_*per 5

您将需要声明type参数T;并且super Objectextends Object不必要:

public static <T> void printDistances(List<Optional<T>> lengths)
Run Code Online (Sandbox Code Playgroud)

请参见Oracle Java教程中的泛型方法