<p>A Single Abstract Method (SAM) interface is a Java interface containing only one method. The Java API is full of SAM interfaces, such as java.lang.Runnable, java.awt.event.ActionListener, java.util.Comparator and java.util.concurrent.Callable. SAM interfaces have a special place in Java 8 because they can be implemented using Lambda expressions or Method references.</p>

<p>Using <code>@FunctionalInterface</code> forces a compile break when an additional, non-overriding abstract method is added to a SAM, which would break the use of Lambda implementations.</p>

<h2>Noncompliant Code Example</h2>
<pre>
  public interface Changeable&lt;T&gt; {
    public void change(T o);
  }
</pre>

<h2>Compliant Solution</h2>
<pre>
  @FunctionalInterface
  public interface Changeable&lt;T&gt; {
    public void change(T o);
  }
</pre>