Некоторые операторы импорта не требуются с локальным выводом типа? - PullRequest
0 голосов
/ 07 мая 2018

Предполагая, что у меня есть следующий класс, который определяет один static служебный метод:

import java.io.IOException;
import java.nio.channels.AsynchronousSocketChannel;

public class Utility {
    public static AsynchronousSocketChannel getChannel() {
        try {
            return AsynchronousSocketChannel.open();
        } catch (IOException e) {
            throw new IllegalStateException();
        }
    }
}

Затем я могу создать класс (расположенный в том же пакете, что и Utility), который использует этот метод:

public class Test {
    public static void main(String[] args) throws Exception {
        var channel = Utility.getChannel();
        System.out.println(channel);
        channel.close();
    }
}

Однако, Test, похоже, не требует каких-либо операторов импорта, даже если он использует AsynchronousSocketChannel локально. Если бы я вместо этого набрал AsynchronousSocketChannel channel = ...;, тогда, очевидно, потребовались бы операторы импорта.

Верно ли мое предположение о том, что операторы импорта выводят во время компиляции (при использовании логического вывода типов) правильно?

1 Ответ

0 голосов
/ 07 мая 2018

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

В частности, они не имеют ничего общего с загрузкой.

Если вы никогда явно не используете typename в коде, вам не нужен импорт.

...