예제 #1
0
  default PTuple8<T1, T2, T3, T4, T5, T6, T7, T8> memo() {
    if (arity() != 8) return (PTuple8) PTuple7.super.memo();
    PTuple8<T1, T2, T3, T4, T5, T6, T7, T8> host = this;
    Map<Integer, Object> values = new ConcurrentHashMap<>();

    return new TupleImpl(Arrays.asList(), 8) {

      public T1 v1() {
        return (T1) values.computeIfAbsent(new Integer(0), key -> host.v1());
      }

      public T2 v2() {
        return (T2) values.computeIfAbsent(new Integer(1), key -> host.v2());
      }

      public T3 v3() {
        return (T3) values.computeIfAbsent(new Integer(2), key -> host.v3());
      }

      public T4 v4() {
        return (T4) values.computeIfAbsent(new Integer(3), key -> host.v4());
      }

      public T5 v5() {
        return (T5) values.computeIfAbsent(new Integer(4), key -> host.v5());
      }

      public T6 v6() {
        return (T6) values.computeIfAbsent(new Integer(5), key -> host.v6());
      }

      public T7 v7() {
        return (T7) values.computeIfAbsent(new Integer(6), key -> host.v7());
      }

      public T8 v8() {
        return (T8) values.computeIfAbsent(new Integer(7), key -> host.v8());
      }

      @Override
      public List<Object> getCachedValues() {
        return Arrays.asList(v1(), v2(), v3(), v4(), v5(), v6(), v7(), v8());
      }

      @Override
      public Iterator iterator() {
        return getCachedValues().iterator();
      }
    };
  }