rspec/rules/S1609/java/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
Inline adoc files when they are included exactly once.

Also fix language tags because this inlining gives us better information
on what language the code is written in.
2023-05-25 14:18:12 +02:00

63 lines
1.9 KiB
Plaintext

== Why is this an issue?
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.
Using ``++@FunctionalInterface++`` forces a compile break when an additional, non-overriding abstract method is added to a SAM, which would break the use of Lambda implementations.
*Note* that this rule is automatically disabled when the project's ``++sonar.java.source++`` is lower than ``++8++``.
=== Noncompliant code example
[source,java]
----
public interface Changeable<T> {
public void change(T o);
}
----
=== Compliant solution
[source,java]
----
@FunctionalInterface
public interface Changeable<T> {
public void change(T o);
}
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Annotate the "XXXX" interface with the "@FunctionalInterface" annotation. [(sonar.java.source not set. Assuming 8 or greater.)]
'''
== Comments And Links
(visible only on this page)
=== on 25 Feb 2014, 23:31:07 Freddy Mallet wrote:
Is implemented by \http://jira.codehaus.org/browse/SONARJAVA-462
=== on 26 Feb 2014, 01:50:25 Ann Campbell wrote:
I expanded a little here. Double-check me, please.
=== on 23 Oct 2015, 13:25:55 Michael Gumowski wrote:
\[~ann.campbell.2] I activated the rule by default, as we are now able to execute it only if the java version of the source code is java8+!
I also added code tags into the description.
=== on 19 Nov 2015, 17:25:40 Michael Gumowski wrote:
Fixed typo in error message (see commit: \https://github.com/SonarSource/sonar-java/commit/ef867a2aa66d071227bb00c2449cef2cceb8a738)
endif::env-github,rspecator-view[]