Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用泛型类型调用LinkedList_Java_Android - Fatal编程技术网

Java 如何使用泛型类型调用LinkedList

Java 如何使用泛型类型调用LinkedList,java,android,Java,Android,我使用了几种不同类型的LinkedList,例如: LinkedList<A> typeA = new LinkedList<>(); LinkedList<B> typeB = new LinkedList<>(); LinkedList<C> typeC = new LinkedList<>(); LinkedList typeA=新建LinkedList(); LinkedList typeB=新LinkedL

我使用了几种不同类型的
LinkedList
,例如:

 LinkedList<A> typeA = new LinkedList<>();
 LinkedList<B> typeB = new LinkedList<>();
 LinkedList<C> typeC = new LinkedList<>();
LinkedList typeA=新建LinkedList();
LinkedList typeB=新LinkedList();
LinkedList typeC=新LinkedList();
然后我想根据类型打印它们,所以对于每种类型,我调用相应的函数

void funcA(LinkedList<A> ls)
void funcB(LinkedList<B> ls)
void funcC(LinkedList<C> ls)
void funcA(链接列表ls)
void funcB(链接列表ls)
void functc(链接列表ls)
我想知道是否有调用一个函数并在该函数中检查类型的选项。
谢谢你的帮助!祝你度过愉快的一天:)

你可以使用通用方法

public <T> void func(LinkedList<T> ls) { // T can be any type
   // do something
}
public void func(LinkedList ls){//T可以是任何类型
//做点什么
}

您可以使用通用方法

public <T> void func(LinkedList<T> ls) { // T can be any type
   // do something
}
public void func(LinkedList ls){//T可以是任何类型
//做点什么
}

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

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);
        }

    }

}
publicstaticvoidmain(字符串[]args){
listStr=Arrays.asList(“A”、“B”、“C”);
List listin=Arrays.asList(1,2,3);
打印列表(listStr);
打印列表(listInt);
}
私有静态无效打印列表(列表){
对于(对象对象:列表){
if(字符串的obj实例){
字符串str=(字符串)obj;
System.out.printf(“字符串:%s\n”,str);
}else if(obj instanceof Integer){
整数=(整数)obj;
System.out.printf(“整数:%s\n”,整数);
}
}
}

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

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);
        }

    }

}
publicstaticvoidmain(字符串[]args){
listStr=Arrays.asList(“A”、“B”、“C”);
List listin=Arrays.asList(1,2,3);
打印列表(listStr);
打印列表(listInt);
}
私有静态无效打印列表(列表){
对于(对象对象:列表){
if(字符串的obj实例){
字符串str=(字符串)obj;
System.out.printf(“字符串:%s\n”,str);
}else if(obj instanceof Integer){
整数=(整数)obj;
System.out.printf(“整数:%s\n”,整数);
}
}
}

如其他人所述,您可以使用以下通用函数:

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)
}
public static void genericFunc(LinkedList ls){
//你可以用列表做些什么,但是
//您不知道T是什么,因此无法调用T的方法
//(不包括属于对象的)
}
如果希望对T中包含的类型具有额外的控制,假设所有对象都继承自基类a,则可以执行以下操作:

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

如其他人所述,您可以使用以下通用函数:

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)
}
public static void genericFunc(LinkedList ls){
//你可以用列表做些什么,但是
//您不知道T是什么,因此无法调用T的方法
//(不包括属于对象的)
}
如果希望对T中包含的类型具有额外的控制,假设所有对象都继承自基类a,则可以执行以下操作:

public static <T extends A> void genericFunc(LinkedList<T> ls) { 
   for (T t : ls){
       t.somePublicMethodOfA(); 
   }
}
public static void genericFunc(LinkedList ls){
对于(T:ls){
t、 somethodofa();
}
}
我将对函数使用另一个通用参数来指示如何根据类型打印列表

例如:

void func<A>(LinkedList<A> list, Show<A> aShow) {
  listShow(aShow).printLn(list)
}
void func(链接列表,显示为显示){
列表显示(aShow).printLn(列表)
}
如果您使用的是Scala,则会使
Show[A]
成为一个隐式参数。

我会在函数中使用另一个通用参数来指示如何根据类型打印列表

例如:

void func<A>(LinkedList<A> list, Show<A> aShow) {
  listShow(aShow).printLn(list)
}
void func(链接列表,显示为显示){
列表显示(aShow).printLn(列表)
}

如果您使用的是Scala,您将使
Show[A]
成为一个隐式参数。

您可以编写一个泛型函数,但这是否合适取决于您的函数将要做什么。您能否更具体地说明您希望在
funcA()
等中实现什么?您可能可以将功能移动到
A
B
C
,并使用更干净的代码:)您可以编写一个通用函数,但这是否合适取决于您的函数将要执行的操作。您能否更具体地说明您希望在
funcA()
中实现的功能?您可能可以将功能移动到
A
B
C
并使用更干净的代码:)非常感谢详细的答案:)非常感谢详细的答案:)谢谢答案:)谢谢答案:)谢谢答案:)谢谢答案:)谢谢答案:)谢谢答案:)