如何使用泛型类型调用LinkedList

时间:2017-03-28 12:22:16

标签: java android

我使用了不同类型的多个LinkedList,例如:

 LinkedList<A> typeA = new LinkedList<>();
 LinkedList<B> typeB = new LinkedList<>();
 LinkedList<C> typeC = new LinkedList<>();

然后我想根据类型打印它们,因此对于每种类型我都会调用相应的函数。

void funcA(LinkedList<A> ls)
void funcB(LinkedList<B> ls)
void funcC(LinkedList<C> ls)

我想知道是否可以选择调用一个函数并在函数内部检查类型。 感谢有帮助的人!祝你有愉快的一天:)

4 个答案:

答案 0 :(得分:1)

正如其他人所提到的,你可以使用像:

这样的通用函数
public static <T> void genericFunc(LinkedList<T> ls) { 
//you can do something with the list but 
//you do not know what T is so you can't invoke T's methods 
//(apart from those belonging to Object)
}

如果你想对T中包含的类型有额外的控制权,假设你的所有对象都是从基类A继承的,那么你可以这样做:

public static <T extends A> void genericFunc(LinkedList<T> ls) { 
   for (T t : ls){
       t.somePublicMethodOfA(); 
   }
}

答案 1 :(得分:0)

我将另一个通用参数用于该函数,以指示如何根据类型打印列表。

请参阅http://www.functionaljava.org/javadoc/4.7/functionaljava/fj/Show.html

示例:

void func<A>(LinkedList<A> list, Show<A> aShow) {
  listShow(aShow).printLn(list)
}

如果您使用Scala,则会使Show[A]成为隐式参数。

答案 2 :(得分:-1)

您可以使用通用方法。

public <T> void func(LinkedList<T> ls) { // T can be any type
   // do something
}

答案 3 :(得分:-1)

您可以在方法的list参数中使用未绑定的泛型类型,它将如下所示:

public static void main(String[] args) {
    List<String>  listStr = Arrays.asList("A","B","C");
    List<Integer> listInt = Arrays.asList(1,2,3);
    printList(listStr);
    printList(listInt);

}

private static void printList(List<?> list) {
    for(Object obj : list){
        if(obj instanceof String){
            String str = (String) obj;
            System.out.printf("String: %s \n", str);
        } else if(obj instanceof Integer){
            Integer integer = (Integer) obj;
            System.out.printf("Integer: %s \n", integer);
        }

    }

}