Допустим, у меня есть следующее перечисление:
public enum Foo {
AAA(new A()::doA),
BBB(new B()::doB),
CCC(new C()::doC),
DDD(new D()::doD);
private Function<String, Number> do;
Foo(Function<String, Number> do) {
this.do = do;
}
public Function<String, Number> getDo() {
return do;
}
}
Зная, что я должен сохранить метод getDo
с точно такой же сигнатурой.
Это прекрасно работает, если я сделаю AAA.getDo().apply("two")
, я получу 2
в результате.Но проблема в том, что каждый вызов метода do
всегда будет выполняться для одних и тех же экземпляров A, B, C и D. Однако Мне нужно, чтобы A, B, C или D были другим экземпляром вкаждый вызов (поскольку у этих классов есть поля, и я не хочу, чтобы эти поля сохраняли свои значения при каждом вызове метода do
).
Я думал о чем-то вроде этого:
AAA(
A.class,
A::doA);
Однако в этом случае A::doA
больше не является функцией на экземпляре A, а представляет собой функцию BiFunction, в которую мне нужно передать экземпляр A в качестве первого параметра.Но мой метод getDo
все еще должен возвращать функцию, и я не вижу способа превратить мою BiFunction и мой класс A в функцию на экземпляре A (мы можем представить что-то вроде: (A::DoA).toFunction(A.class)
).