1 import java.util.*; 2 3 class MaterializeMember { 4 // inspired by TestNG-7.3.0 5 // https://github.com/testng-team/testng/blob/9ae7d3d9d19e5aa51e9610549c72e883718e82e5/src/main/java/org/testng/internal/reflect/ReflectionRecipes.java#L369C56-L369C80 6 private static class ListBackedImmutableQueue<T> { 7 private final List<T> backingList; 8 9 ListBackedImmutableQueue(final T[] elements) { 10 backingList = new ArrayList<>(elements.length); 11 Collections.addAll(backingList, elements); 12 } 13 14 T poll() { 15 if (!backingList.isEmpty()) { 16 return backingList.remove(0); 17 } 18 throw new RuntimeException("Queue exhausted"); 19 } 20 } 21 22 public void test() { 23 Integer[] parameters = new Integer[3]; 24 for (int i = 0; i < parameters.length; ++i) { 25 parameters[i] = Integer.valueOf(i); 26 } 27 var queue = new ListBackedImmutableQueue<Integer>(parameters); 28 for (Integer p : parameters) { 29 Integer t = queue.poll(); 30 if (!t.equals(p)) { 31 throw new RuntimeException("wrong result!"); 32 } 33 } 34 } 35 36 public static void main(String[] args) { 37 MaterializeMember kase = new MaterializeMember(); 38 for (int i = 0; i < 300_000; ++i) { 39 kase.test(); 40 } 41 } 42 }