fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main(String[] args) {
  11. DocumentRow row = new DocumentRow();
  12. row.setValue(Column.TEXT_VALUE, new DocumentCell<>("asdf"));
  13. row.setValue(Column.NUMERIC_VALUE, new DocumentCell<>(4));
  14. row.setValue(Column.DATE_VALUE, new DocumentCell<>(new Date()));
  15.  
  16. String s = row.getValue(Column.TEXT_VALUE);
  17. Number i = row.getValue(Column.NUMERIC_VALUE);
  18. Date d = row.getValue(Column.DATE_VALUE);
  19.  
  20. System.out.format("%s, %d, %s", s, i ,d);
  21. }
  22. }
  23.  
  24. class DocumentRow {
  25.  
  26. private Map<Column<?>, DocumentCell<?>> rowContents = new HashMap<>();
  27.  
  28. public <U> U getValue(Column<U> column) {
  29. @SuppressWarnings("unchecked")
  30. DocumentCell<U> doc = (DocumentCell<U>) rowContents.get(column);
  31. return doc.getValue(column);
  32. }
  33.  
  34.  
  35. public <U> void setValue(Column<U> column, DocumentCell<U> value) {
  36. rowContents.put(column, value);
  37. }
  38. }
  39.  
  40. class DocumentCell<T> {
  41. private T value;
  42.  
  43. public DocumentCell(T t){ this.value = t; }
  44.  
  45. public T getValue(Column<T> c){
  46. return value;
  47. }
  48. }
  49.  
  50. class Column<T> {
  51. public static final Column<String> TEXT_VALUE = new Column<>("Text_Column_Name", String.class);
  52. public static final Column<Number> NUMERIC_VALUE = new Column<>("Numeric_Column_Name", Number.class);
  53. public static final Column<Date> DATE_VALUE = new Column<>("Date_Column_Name", Date.class);
  54.  
  55. String name;
  56. Class<T> clazz;
  57.  
  58. private Column(String name, Class<T> clazz){
  59. this.name = name;
  60. this.clazz = clazz;
  61. }
  62. }
Success #stdin #stdout 0.07s 29748KB
stdin
Standard input is empty
stdout
asdf, 4, Fri May 18 06:56:11 GMT 2018