fork download
  1. import java.lang.reflect.Array;
  2. import java.util.stream.*;
  3. import java.util.*;
  4.  
  5. import static java.lang.System.err;
  6.  
  7.  
  8. abstract class Table {
  9. protected String name = null;
  10. protected List<Column<?>> columns;
  11. protected Column<?>[] arrColumns = null;
  12.  
  13. public Column<?>[] getColumnsAsArray() {
  14. if (null == columns) {
  15. return null;
  16. }
  17. Column<?>[] arr = (Column<?>[]) Array.newInstance(Column.class, columns.size());
  18. return columns.toArray(arr);
  19. }
  20.  
  21. abstract class Column < V > {
  22. String name = null;
  23. Integer type = null;
  24.  
  25. class Value < V > {
  26. V value;
  27.  
  28. Value(V value) {
  29. this.value = value;
  30. }
  31. }
  32.  
  33. public String toString() {
  34. return name + ": " + type.toString();
  35. }
  36. }
  37.  
  38. public String toString() {
  39. return this.name + "\nlist: (" + columns.stream().map(Column::toString).collect(Collectors.joining(", ")) + ")"
  40. + "\narr: (" + Stream.of(arrColumns).map(Column::toString).collect(Collectors.joining(", ")) + ")";
  41. }
  42. }
  43.  
  44. class Delivery extends Table {
  45. {
  46. name = "Delivery";
  47. }
  48.  
  49. class Number extends Table.Column<Number> {
  50. {
  51. name = "Number";
  52. type = 1;
  53. }
  54. }
  55.  
  56. class Date extends Table.Column<String> {
  57. {
  58. name = "Date";
  59. type = 10;
  60. }
  61. }
  62. }
  63.  
  64. public class Main {
  65.  
  66. public static void main(String[] args) {
  67. Delivery delivery = new Delivery();
  68. delivery.columns = Arrays.asList(delivery.new Number(), delivery.new Date());
  69.  
  70. delivery.arrColumns = delivery.getColumnsAsArray();
  71.  
  72. err.println(delivery);
  73.  
  74. Arrays.stream(delivery.arrColumns)
  75. .map(Object::getClass)
  76. .forEach(System.out::println);
  77. }
  78. }
Success #stdin #stdout #stderr 0.15s 38504KB
stdin
Standard input is empty
stdout
class Delivery$Number
class Delivery$Date
stderr
Delivery
list: (Number: 1, Date: 10)
arr: (Number: 1, Date: 10)