Как вам не нужно предоставлять аргументы для Test_Child :: new
Поскольку это ссылка на метод для представления лямды s -> new Test_Child(s)
, которую можно создать как Интерфейс Factory
в конечном итоге становится FunctionalInterface
.
Как вызов f.create () в экземпляре Product ссылается на конструктор класса Test_Child.
Поскольку это тип экземпляра, переданный через TestBuilder
, Product
оба имеют атрибут Factory<Test_Child>
. Было бы очень ясно, когда вы переписываете назначение как
TestBuilder<Test_Child> tb = TestBuilder.create(Test_Child::new)
Чтобы объяснить дальше, как комментарии, вписанные с кодом
TestBuilder tb = TestBuilder.create(Test_Child::new); TestBuilder
// TestBuilder<Test_Child> is build with a Factory<Test_Child> attribute
Product<Test_Child> p = tb.build();
// We have build a Product<Test_Child> which has a Factory<Test_Child> attribute from above
Test tc = p.Construct("Test");
// invokes the 'create' method of the Factory which calls 'new Test_Child(s)' to print the output