What's the tersest way to declare a list/array literal in Java, both at point of declaration and point of use?
As a secondary concern, I'd prefer a method that doesn't cause a compile-time warnings or require warnings to be suppressed.
Note: Personally this is for Java 8ish on Android, incase that changes the answers.
I've tried:
// error: generic array creation
Pair<Integer, String>[] data4 = new Pair<Integer, String>[] {
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
};
// warning: unchecked assignment
Pair<Integer, String>[] data4 = new Pair[] {
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
};
for (Pair<Integer, String> x : data4) {
}
Pair[] data5 = new Pair[] {
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
};
// warning: unchecked assignment
for (Pair<Integer, String> x : data5) {
}
for (Pair x : data5) {
//warning: unchecked assignment
Pair<Integer, String> y = x;
}
// warning: unchecked generics array creation for vargs parameter
List<Pair<Integer, String>> data = Arrays.asList(
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
);
for (Pair<Integer, String> x : data) {
}
List<Pair> data2 = Arrays.asList(
(Pair) new Pair<Integer, String>(0, "00000000"),
(Pair) new Pair<Integer, String>(1, "00000001"),
(Pair) new Pair<Integer, String>(127, "11111111"),
(Pair) new Pair<Integer, String>(128, "10000000")
);
// warning: unchecked assignment
for (Pair<Integer, String> x : data2) {
}
for (Pair x : data2) {
// warning: unchecked assignment
Pair<Integer, String> y = x;
}