import java.lang.reflect.Array;
import java.util.stream.*;
import java.util.*;
import static java.
lang.
System.
err;
abstract class Table {
protected List<Column<?>> columns;
protected Column<?>[] arrColumns = null;
public Column<?>[] getColumnsAsArray() {
if (null == columns) {
return null;
}
Column
<?>[] arr
= (Column
<?>[]) Array.
newInstance(Column.
class, columns.
size()); return columns.toArray(arr);
}
abstract class Column < V > {
class Value < V > {
V value;
Value(V value) {
this.value = value;
}
}
return name + ": " + type.toString();
}
}
return this.name + "\nlist: (" + columns.stream().map(Column::toString).collect(Collectors.joining(", ")) + ")"
+ "\narr: (" + Stream.of(arrColumns).map(Column::toString).collect(Collectors.joining(", ")) + ")";
}
}
class Delivery extends Table {
{
name = "Delivery";
}
class Number extends Table.
Column<Number
> { {
name = "Number";
type = 1;
}
}
class Date extends Table.
Column<String
> { {
name = "Date";
type = 10;
}
}
}
public class Main {
public static void main
(String[] args
) { Delivery delivery = new Delivery();
delivery.arrColumns = delivery.getColumnsAsArray();
err.println(delivery);
Arrays.
stream(delivery.
arrColumns) .
forEach(System.
out::println
); }
}
aW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkFycmF5OwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwppbXBvcnQgamF2YS51dGlsLio7CgppbXBvcnQgc3RhdGljIGphdmEubGFuZy5TeXN0ZW0uZXJyOwoKCmFic3RyYWN0IGNsYXNzIFRhYmxlIHsKICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBudWxsOwogIHByb3RlY3RlZCBMaXN0PENvbHVtbjw/Pj4gY29sdW1uczsKICBwcm90ZWN0ZWQgQ29sdW1uPD8+W10gYXJyQ29sdW1ucyA9IG51bGw7CgogIHB1YmxpYyBDb2x1bW48Pz5bXSBnZXRDb2x1bW5zQXNBcnJheSgpIHsKICAgICAgaWYgKG51bGwgPT0gY29sdW1ucykgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgQ29sdW1uPD8+W10gYXJyID0gKENvbHVtbjw/PltdKSBBcnJheS5uZXdJbnN0YW5jZShDb2x1bW4uY2xhc3MsIGNvbHVtbnMuc2l6ZSgpKTsKICAgICAgcmV0dXJuIGNvbHVtbnMudG9BcnJheShhcnIpOwogIH0KCiAgYWJzdHJhY3QgY2xhc3MgQ29sdW1uIDwgViA+IHsKICAgIFN0cmluZyBuYW1lID0gbnVsbDsKICAgIEludGVnZXIgdHlwZSA9IG51bGw7CgogICAgY2xhc3MgVmFsdWUgPCBWID4gewogICAgICBWIHZhbHVlOwoKICAgICAgVmFsdWUoViB2YWx1ZSkgewogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBuYW1lICsgIjogIiArIHR5cGUudG9TdHJpbmcoKTsKICAgIH0KICB9CgogIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gdGhpcy5uYW1lICsgIlxubGlzdDogKCIgKyBjb2x1bW5zLnN0cmVhbSgpLm1hcChDb2x1bW46OnRvU3RyaW5nKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygiLCAiKSkgKyAiKSIKICAgICAgICAgICAgICAgICAgICAgKyAiXG5hcnI6ICgiICsgU3RyZWFtLm9mKGFyckNvbHVtbnMpLm1hcChDb2x1bW46OnRvU3RyaW5nKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygiLCAiKSkgKyAiKSI7CiAgfQp9CgpjbGFzcyBEZWxpdmVyeSBleHRlbmRzIFRhYmxlIHsKICB7CiAgICBuYW1lID0gIkRlbGl2ZXJ5IjsKICB9CgogIGNsYXNzIE51bWJlciBleHRlbmRzIFRhYmxlLkNvbHVtbjxOdW1iZXI+IHsKICAgIHsKICAgICAgbmFtZSA9ICJOdW1iZXIiOwogICAgICB0eXBlID0gMTsKICAgIH0KICB9CgogIGNsYXNzIERhdGUgZXh0ZW5kcyBUYWJsZS5Db2x1bW48U3RyaW5nPiB7CiAgICB7CiAgICAgIG5hbWUgPSAiRGF0ZSI7CiAgICAgIHR5cGUgPSAxMDsKICAgIH0KICB9Cn0KCnB1YmxpYyBjbGFzcyBNYWluIHsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgRGVsaXZlcnkgZGVsaXZlcnkgPSBuZXcgRGVsaXZlcnkoKTsKICAgIGRlbGl2ZXJ5LmNvbHVtbnMgPSBBcnJheXMuYXNMaXN0KGRlbGl2ZXJ5Lm5ldyBOdW1iZXIoKSwgZGVsaXZlcnkubmV3IERhdGUoKSk7CgogICAgZGVsaXZlcnkuYXJyQ29sdW1ucyA9IGRlbGl2ZXJ5LmdldENvbHVtbnNBc0FycmF5KCk7CgogICAgZXJyLnByaW50bG4oZGVsaXZlcnkpOwogICAgCiAgICBBcnJheXMuc3RyZWFtKGRlbGl2ZXJ5LmFyckNvbHVtbnMpCiAgICAgICAgICAubWFwKE9iamVjdDo6Z2V0Q2xhc3MpCiAgICAgICAgICAuZm9yRWFjaChTeXN0ZW0ub3V0OjpwcmludGxuKTsKICB9Cn0=