title: Why can't @FunctionalInterface be applied to a SAM abstract base class
body: <p>I'm just starting to learn Camel and the first thing I see is</p>
  
  <pre><code>    context.addRoutes(new RouteBuilder() {
          public void configure() {
              from("file:data/inbox?noop=true").to("file:data/outbox");
          }
      });
  </code></pre>
  
  <p>which I (reasonably IMHO) try to replace with</p>
  
  <pre><code>    context.addRoutes(()-&gt;from("file:data/inbox?noop=true").to("file:data/outbox"));
  </code></pre>
  
  <p>but that is not valid.</p>
  
  <p>As I dig, I discover that lambdas apply to functional interfaces (which is be implied, if the interface qualifies) but that the @FunctionalInterface annotation can only be applied to interfaces (fair enough) and there is, as far as I can tell, no equivalent annotation for abstract classes. RouteBuilder is, of course, an abstract class.</p>
  
  <p>Why are lambdas restricted to interfaces?</p>
  
  <p>What is the essential difference between an interface and a class that makes a "functional class" unsafe/unpredictable/unreasonable?</p>
  
  <p>I could understand if there was some qualifier, such as the abstract method had to be public, but I am at a loss to explain why the above is unreasonable.</p>