UsageTestModel.java

package org.reflections;

import java.util.function.ToDoubleFunction;
import java.util.stream.Stream;

public interface UsageTestModel {
	class C1 {
		C2 c2 = new C2();
		public C1() {}
		public C1(C2 c2) {this.c2 = c2;}
		public void method() {c2.method();}
		public void method(String string) {c2.method();}
	}

	class C2 {
		C1 c1 = new C1();
		public void method() {
			c1 = new C1();
			c1 = new C1(this);
			c1.method();
			c1.method("");
		}

		public double useAnonymousClass(C2... objects) {
			return Stream.of(objects)
					.mapToDouble(new ToDoubleFunction<C2>() {
						@Override
						public double applyAsDouble(C2 c1) {
							return c1.zero();
						}
					})
					.sum();
		}
		public double useLambda(C2... objects) {
			return Stream.of(objects)
					.mapToDouble(it -> it.zero())
					.sum();
		}
		public double useMethodReference(C2... objects) {
			return Stream.of(objects)
					.mapToDouble(C2::zero)
					.sum();
		}
		double zero() { return 0; }
	}
}