Здесь возможна реализация в рабочем коде решения псевдокода, написанного silvertab.
Спасибо silvertab!
public class Array {
public static <T> T[] concat(T[] a, T[] b, ArrayBuilderI<T> builder) {
T[] c = builder.build(a.length + b.length);
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
}
Далее следует интерфейс строителя.
Примечание: сборщик необходим, потому что в Java невозможно выполнить
new T[size]
из-за стирания универсального типа:
public interface ArrayBuilderI<T> {
public T[] build(int size);
}
Здесь конкретный конструктор, реализующий интерфейс, создающий массив Integer
:
public class IntegerArrayBuilder implements ArrayBuilderI<Integer> {
@Override
public Integer[] build(int size) {
return new Integer[size];
}
}
И, наконец, приложение / тест:
@Test
public class ArrayTest {
public void array_concatenation() {
Integer a[] = new Integer[]{0,1};
Integer b[] = new Integer[]{2,3};
Integer c[] = Array.concat(a, b, new IntegerArrayBuilder());
assertEquals(4, c.length);
assertEquals(0, (int)c[0]);
assertEquals(1, (int)c[1]);
assertEquals(2, (int)c[2]);
assertEquals(3, (int)c[3]);
}
}
Я не думаю, что вы сможете, кроме как, возможно, взяв исходный код SlidingDrawer
, внося в него изменения и используя свою модифицированную версию. Точно так же нельзя сделать выдвижной ящик
, спускающийся сверху.