我有一个通用的ArrayList,其中包含不同类型的数组。我需要遍历内部数组的每个元素并访问它们。但是,由于使用泛型,我不确定如何访问内部数组元素。
一旦我有了ArrayList的第一个循环中的数组,如何访问每个元素?
这是我所拥有的简化版本:
public static void main(String[] args) {
ArrayList<Object[]> arrList = new ArrayList<>();
Integer[] a1 = {1,2,3,4};
String[] a2 = {"a", "b", "c"};
Double[] a3 = {4.0, 5.0, 6.0};
arrList.add(a1);
arrList.add(a2);
arrList.add(a3);
printList(arrList);
}
public static <E> void printList(ArrayList<E> arrList) {
for (E arr : arrList) {
for (E elm : arr) {
System.out.println(elm);
}
}
}
答案 0 :(得分:7)
问题在于,在方法的主体内,编译器不知道import { Component, OnInit, ViewChild } from '@angular/core';
import { RouterOutlet, Router, ActivationStart } from '@angular/router';
@Component({
selector: 'app-administration',
templateUrl: './administration.component.html',
styleUrls: ['./administration.component.css']
})
export class AdministrationComponent implements OnInit {
@ViewChild(RouterOutlet) outlet: RouterOutlet;
constructor(
private router: Router
) { }
ngOnInit(): void {
this.router.events.subscribe(e => {
if (e instanceof ActivationStart && e.snapshot.outlet === "administration")
this.outlet.deactivate();
});
}
}
是一个数组。 E
可以是字符串,整数或任何其他形式。嵌套循环是不可能的,因为它们不适用于这些情况。
您可以在方法声明中使用E
代替ArrayList<E[]>
,以使此方法仅适用于数组。当我们这样做时,ArrayList<E>
解析为E
而不是Object
:
Object[]
如果仅将public static <E> void printList(ArrayList<E[]> arrList) {
for (E[] arr : arrList) {
for (E elm : arr) {
System.out.println(elm);
}
}
}
(类型为arrList
)传递给此方法,则不需要通用。您可以改为接受ArrayList<Object[]>
。
ArrayList<Object[]>
答案 1 :(得分:1)
请参见
System.out.println(Arrays.deepToString(arrList.toArray()));
用于轻松,快速地打印多维数组。