
When an include is not surrounded by empty lines, its content is inlined on the same line as the adjacent content. That can lead to broken tags and other display issues. This PR fixes all such includes and introduces a validation step that forbids introducing the same problem again.
56 lines
1.2 KiB
Plaintext
56 lines
1.2 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Needing to cast from an ``++interface++`` to a concrete type indicates that something is wrong with the abstractions in use, likely that something is missing from the ``++interface++``. Instead of casting to a discrete type, the missing functionality should be added to the ``++interface++``. Otherwise there is the risk of runtime exceptions.
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,java]
|
|
----
|
|
public interface MyInterface {
|
|
void doStuff();
|
|
}
|
|
|
|
public class MyClass1 implements MyInterface {
|
|
int data;
|
|
public void DoStuff() {
|
|
// TODO...
|
|
}
|
|
}
|
|
|
|
public static class DowncastExampleProgram {
|
|
static void EntryPoint(MyInterface interfaceRef) {
|
|
MyClass1 class1 = (MyClass1)interfaceRef; // Noncompliant
|
|
int privateData = class1.data;
|
|
}
|
|
}
|
|
----
|
|
|
|
=== Exceptions
|
|
|
|
Casting to ``++Object++`` doesn't raise an issue, because it can never fail.
|
|
|
|
[source,java]
|
|
----
|
|
static void EntryPoint(IMyInterface interfaceRef)
|
|
{
|
|
Object o = (Object)interfaceRef;
|
|
...
|
|
}
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::../message.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::../comments-and-links.adoc[]
|
|
|
|
endif::env-github,rspecator-view[]
|