2015-02-13 3 views
1

при подготовке к экзамену JCA Я просто наткнулся на этот фрагментнеясность в отношении синтаксиса импорта в Java

import java.lang.String.*; 
class EJava 
{ 
String guru; 
} 

Это, конечно, нонсенс кода, как java.lang импортируется по умолчанию. Во всяком случае, автор хочет использовать его, чтобы указать, что этот код не будет компилироваться, поскольку он использует неправильный синтаксис импорта.

Код действительно скомпилирован. Так ли это, что импорт с помощью подстановочного знака может означать две вещи?

import somepackage.*; // import any type in the package somepackage 

import somepackage.type.*; // import any member of this type (equivalent to : import somepackege.type;) 
+1

Для импорта любого участника вам необходимо импортировать статическую информацию. – JClassic

ответ

4

Это, безусловно, обобщать, но заявление будет импортировать все общественных пользование Вложенных классов в java.lang.String классе и, к сожалению, нет ни одного.

Настолько эффективно заявление бесполезно, но безвредно. В компиляции не должно быть проблем.


Если вы используете статический импорт, дело было бы иначе, так как есть много статических методов в String классе.

+0

@AndrewTobey Классы уже общедоступны и видны. Это просто избавит вас от написания полного имени вложенного класса. Кроме того, он не включает импорт самого класса, только его общедоступные классы. – RealSkeptic

+0

Благодаря @RealSkeptic для замены внутреннего на вложенный. Я пропустил этот случай. :) –

3

От Java Language Specification

A импорта типа по требованию декларации позволяет все доступные типы в имени пакета или типа, которые будут импортированы по мере необходимости.

[...]

статический импорт по требованию декларации позволяет всем доступные статические членов именованного типа, которые будут импортированы по мере необходимости.

Так что ваши

import java.lang.String.*; 

будет импортировать все доступные Типы в String (нет доступных из них в Oracle JDK 8). A static импорт будет импортировать все доступные static членов, включая методы.

+0

thx. теперь понятно, почему это связано с вложенными классами. :-) –