rspec/rules/S1694/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

69 lines
1.3 KiB
Plaintext

== Why is this an issue?
The purpose of an abstract class is to provide some heritable behaviors while also defining methods which must be implemented by sub-classes.
A class with no abstract methods that was made abstract purely to prevent instantiation should be converted to a concrete class (i.e. remove the ``++abstract++`` keyword) with a private constructor.
A class with only abstract methods and no inheritable behavior should be converted to an interface.
=== Noncompliant code example
[source,text]
----
public abstract class Animal { // Noncompliant; should be an interface
abstract void move();
abstract void feed();
}
public abstract class Color { // Noncompliant; should be concrete with a private constructor
private int red = 0;
private int green = 0;
private int blue = 0;
public int getRed() {
return red;
}
}
----
=== Compliant solution
[source,text]
----
public interface Animal {
void move();
void feed();
}
public class Color {
private int red = 0;
private int green = 0;
private int blue = 0;
private Color () {}
public int getRed() {
return red;
}
}
public abstract class Lamp {
private boolean switchLamp=false;
public abstract void glow();
public void flipSwitch() {
switchLamp = !switchLamp;
if (switchLamp) {
glow();
}
}
}
----