[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/dingguangbo/Java/master/java-lambda/README.md [Back]  [Original]

Using Lambda to Implement Functional Interface Method
====================================================

- We have a *virtual* `Button` that when clicked will call an abstract method **onClick()** of a listener interface `OnClickListener`.
- We need to implement the **onClick()** so that it prints the `Button` name. 

`OnClickListener.java`

```java
package com.hmkcode;

public interface OnClickListener {
	void onClick(Button button);
}
```

`Button.java`

```java
package com.hmkcode;

public class Button {

	private OnClickListener onClickListener;
	private String name;

	// click the button
	public void click(){
		this.onClickListener.onClick(this);
	}
	
	// getters & setters
}
```

- We have three ways to achieve that:
 1. **Implement** `OnClickListener` and override **onClick()** method.
 2. Use `OnClickListener` as an anonymous class.
 3. Use Lambda.
 
- Our main class is `App.java`

```java
package com.hmkcode;

public class App
{
    public static void main( String[] args ){
        System.out.println( "Running App..." );
        new App().run(); 
    }

    public void run(){
        
        Button myButton = new Button();
        myButton.setName("MyButton");
        
        // 1. implements onClickListener
        
        // 2. anonymous class

        // 3. lambda
    	
	
    	// click the button
    	myButton.click();
    }
}
```

### 1. **Implement** `OnClickListener` and override **onClick()** method

```java
public class App implements OnClickListener
{
    public static void main( String[] args ){...}

    public void run(){
        
        Button myButton = new Button();
        myButton.setName("MyButton");
        
        // 1. implements onClickListener
        myButton.setOnClickListener(this);
        
        // click the button
    	myButton.click();
    }
	
	@Override
	public void onClick(Button button) {
		System.out.println(button.getName() +" Clicked! - implements interface");
		
	}
}
```

### 2. Use `OnClickListener` as an anonymous class

```java
public class App
{
    public static void main( String[] args ){...}

    public void run(){
        
        Button myButton = new Button();
        myButton.setName("MyButton");
                
        // 2. anonymous class
        myButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(Button button) {
				System.out.println(button.getName() +" Clicked! - anonymous class");
			}
		}); 
        
        // click the button
    	myButton.click();
    }
}
```

### 3. Use Lambda

```java
public class App
{
    public static void main( String[] args ){...}

    public void run(){
        
        Button myButton = new Button();
        myButton.setName("MyButton");

        // 3. lambda
    	OnClickListener lambda = button -> { System.out.println(button.getName()+" Clicked! - lambda"); } ;
    	myButton.setOnClickListener(lambda);
		
        // click the button
    	myButton.click();
    } 
}
```

*To run the code use*

```
java-lambda>mvn exec:java
```


Web Proxy Viewer  |  New URL  |  Original Page