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
并使用更干净的代码:)非常感谢详细的答案:)非常感谢详细的答案:)谢谢答案:)谢谢答案:)谢谢答案:)谢谢答案:)谢谢答案:)谢谢答案:)