Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: '&xA7' changed to '&sect'.

...

Wiki Markup
When a developer uses an identifier that has the same name as a public class, such as {{Vector}}, a subsequent maintainer might be unaware that this identifier does not actually refer to {{java.util.Vector}} and might unintentionally use the custom {{Vector}} rather than the original {{java.util.Vector}} class. The custom type {{Vector}} can [shadow|BB. Glossary#shadow] a class name from {{java.util.Vector}}, as specified by the JLS, [&#xA7sect;6.3.2, "Obscured Declarations"|http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.3.2] \[[JLS 2005|AA. References#JLS 05]\]. This can result in unexpected program behavior.

Wiki Markup
Well-defined import statements can resolve these issues. However, when reused name definitions are imported from other packages, use of the _type-import-on-demand declaration_ (see the JLS, [&#xA7sect;7.5.2, "Type-Import-on-Demand Declaration"|http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.5.2] \[[JLS 2005|AA. References#JLS 05]\]) can complicate a programmer's attempt to determine which specific definition was intended to be used. Additionally, a common practice that can lead to errors is to produce the import statements _after_ writing the code, often via automatic inclusion of import statements by an IDE. This creates further ambiguity with respect to the names. When a custom type is found earlier than the intended type in the Java include path, no further searches are conducted. Consequently, the wrong type is silently adopted. 

...

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="cc4e4c21b7298a23-d8311e84-4b3b45de-94e69479-7b19ac29a6bbbaacbc643c46"><ac:plain-text-body><![CDATA[

[[JLS 2005

AA. References#JLS 05]]

[§6.3.2, Obscured Declarations

http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.3.2]

]]></ac:plain-text-body></ac:structured-macro>

 

§6.3.1, Shadowing Declarations

 

§7.5.2, Type-Import-on-Demand Declaration

 

§14.4.3, Shadowing of Names by Local Variables

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="61c0249fef38ab9c-8a537563-45e9498b-912581ad-c90be3602d24e83b7830e379"><ac:plain-text-body><![CDATA[

[[FindBugs 2008

AA. References#FindBugs 08]]

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3dcdfabb806ecdfe-a80839c8-4b9643c2-a93ca99c-dba911e071352ee743588f77"><ac:plain-text-body><![CDATA[

[[Bloch 2005

AA. References#Bloch 05]]

Puzzle 67. All strung out

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="9ad2eef8d92fe547-149ce023-46c140ce-8359a2b0-fd315b12ace11da7c72dc2d1"><ac:plain-text-body><![CDATA[

[[Bloch 2008

AA. References#Bloch 08]]

Item 16. Prefer interfaces to abstract classes

]]></ac:plain-text-body></ac:structured-macro>

...