
рдореЗрд░реЗ рдкрд╛рд╕ рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдФрд░ RxJava рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВред рдпреЗ рд╕рд╡рд╛рд▓ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдпрд╛ RxJava рдХреА рдЕрдзреВрд░реА рд╕рдордЭ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рднрд╛рд╡реЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред RxJava рдореИрдВ рдЕрд▓рдЧ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдФрд░ рдЖрд░рдПрдХреНрд╕рдЬрд╛рд╡
рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдХреНрдпрд╛ рд╣реИрдВ? рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдмрд╕" рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╣рдо рд╣рдореЗрд╢рд╛ рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдПрдХ рдХреНрд▓реАрдирд░ рдФрд░ рдХрдо рдХреНрд░рд┐рдпрд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдПрдХ рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
abstract class Animal { abstract void speak(); } Animal a = new Animal() { void speak() { System.out.println("Woff"); } };
рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░, рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП:
Button btn = findViewById(R.id.button); btn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View view) {
рдЖрдЗрдП рд▓рд╛рдореНрдмрд╛ рдХреЗ рднрд╛рд╡реЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдпрд╣ рдЕрдЧрд▓рд╛ рднрд╛рдЧ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
new View.OnClickListener() { @Override public void onClick(final View view) {
рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП, View.OnClickListener рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИ?
new View.OnClickListener() { @Override public void onClick(final View view) {
рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ -> рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
(view) -> {
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рдХрд░ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(View view) -> {
рдЖрдк рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдХреЛрдб рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(view) -> { Intent intent = new Intent(context, AuthActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); view.getContext().startActivity(intent); }
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ ...
interface MyInterface { abstract void onMethod(int a, int b); }
... рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
(a, b) -> {
рдпрджрд┐ рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рд╣реИ ...
interface MySecondInterface { abstract int onSecondMethod(int a, int b); }
... рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
(a, b) -> { return a + b; }
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ рдХреЛрдб рдХреЛ рдФрд░ рднреА рдЫреЛрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рддреЛ рдЖрдк рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ {} ред рдпрджрд┐ рдЖрдк рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЛ рднреА рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛:
(a, b) -> return a + b
рдПрдХ рдФрд░ рдЪреАрдЬ рд╣реИ рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рдХ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗ рднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
(a, b) -> a + b
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рдореНрди рдкрд░ рдЖ рдЬрд╛рдПрдЧрд╛:
(a, b) -> { a+=1; return a + b; }
рддреЛ рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ? рд╣рдордиреЗ рдЗрд╕реЗ рд▓рд┐рдпрд╛:
new MySecondInterface() { @Override public int onSecondMethod(final int a, final int b) { return a + b; } };
рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛:
(a, b) -> a + b
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ, рд╡рд┐рдзрд┐ рд╕рдВрджрд░реНрднред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдФрд░ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рдЬреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
public interface Callback { public void onEvent(int event); } public void myMethod(Callback callback){ }
рдПрдХ рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
myMethod(new Callback() { @Override public void onEvent(final int state) { System.out.println(state); } });
рдПрдХ рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛрдбрд╝рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:
myMethod(state -> System.out.println(state));
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рд╣реИ рдФрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рд╕рдВрджрд░реНрдн рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
myMethod(System.out::println);
рдПрдХ рдФрд░ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛! рдХрдорд╛рд▓ рд╣реИ рдирд╛? рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрд╛ рд╣реИ!