为什么我不能从 com.sun.media.sound 导入?

Why can't I import from com.sun.media.sound?

我想使用 Java JDK 中包含的音频合成器和 midi classes。 MidiSystem.getSynthesizer() returns 合成器。调试显示实际的 class 是 SoftSynthesizer。所以这个测试通过了:

    @Test
    void defaultSynth() throws MidiUnavailableException {
        Synthesizer synthesizer = MidiSystem.getSynthesizer();
        assertEquals("SoftSynthesizer", synthesizer.getClass().getSimpleName());
    }

但我无法使用 class SoftSynthesizer 和 AudioSynthesizer 接口(它扩展了 Synthesizer,SoftSynthesizer 实现了它)。

下面,AudioSynthesizer 和 SoftSynthesizer 被注释掉了,因为它们没有解析。

   void foo() {
        // Resolved symbol
        Synthesizer s = null;

        // Unresolved symbols
        //AudioSynthesizer as = null;
        //SoftSynthesizer ss = null;
    }

一个区别是这些库和接口来自不同的包。从 com.sun.media.sound 导入无效。

import javax.sound.midi.Synthesizer;
//import com.sun.media.sound.AudioSynthesizer;
//import com.sun.media.sound.SoftSynthesizer;

但这两个包似乎都包含在 JDK 中,那么这有什么关系(如果有的话)?

在 IntelliJ、MacOS 上使用 Java-11 和 Java-17 (Azul) 进行测试。使用 Maven。

大多数内部 API(因为)JDK9 无法被 JDK 之外的代码访问 请参阅 JEP 260:封装大多数内部 API 了解详细信息和潜在的解决方法。