6.4 روشهای نمونه سازی مجدد

ایجاد یک مرجع روش برای یک شی خاص:
اگر یک شی (رودریگو) داشته باشیم ، می توانیم یکی از روش های آن مانند Rodrigo :: Makederator را ارجاع دهیم.
مثال:
Usuario rodrigo = new Usuario("Rodrigo Turini", 50);
Runnable bloco = rodrigo::tornaModerador;
bloco.run(); // Equivalente a rodrigo.tornaModerador()
این مرجع روش معادل یک لامبدا است:
Runnable bloco2 = () -> rodrigo.tornaModerador();
تفاوت بین رودریگو :: سازنده و کاربر :: Makederator:
Rodrigo :: Makederator به روشی از یک شیء خاص (رودریگو) اشاره می کند و می تواند به عنوان Runnable استنباط شود (زیرا پارامترهایی دریافت نمی کند).
کاربر :: Makeriser به روش هر شیء از نوع کاربر اشاره می کند و می تواند به عنوان مصرف استنباط شود ، زیرا به یک آرگومان (کاربر) نیاز دارد.
مثال:
Consumer consumer = Usuario::tornaModerador;
consumer.accept(rodrigo); // Invoca rodrigo.tornaModerador()
معادل لامبدا:
Consumer consumer2 = u -> u.tornaModerador();
خطاها هنگام مخلوط کردن انواع مرجع:
اختصاص دادن کاربر :: Runnable امکان پذیر نیست ، زیرا آرگومان دریافت نمی کند در حالی که مصرف کننده به یک پارامتر نیاز دارد.
مثال نامعتبر:
Runnable consumer = Usuario::tornaModerador; // Erro de compilação!
نتیجه گیری:
منابع متد به ما این امکان را می دهد تا به روشهای نمونه اشیاء خاص یا هر نمونه از یک کلاس مراجعه کنیم.
کامپایلر نوع رابط عملکردی صحیح را بر اساس زمینه تحت الشعاع قرار می دهد.