将 if else 替换为三元不起作用

Replace if else with ternary not working

我正在尝试用三元表达式替换这段代码:

if (m_dataSource instanceof URL) {
        m_audioInputStream = AudioSystem.getAudioInputStream((URL) m_dataSource);
        m_audioFileFormat = AudioSystem.getAudioFileFormat((URL) m_dataSource);

    } else if (m_dataSource instanceof File) {
        m_audioInputStream = AudioSystem.getAudioInputStream((File) m_dataSource);
        m_audioFileFormat = AudioSystem.getAudioFileFormat((File) m_dataSource);

    } else if (m_dataSource instanceof InputStream) {
        m_audioInputStream = AudioSystem.getAudioInputStream((InputStream) m_dataSource);
        m_audioFileFormat = AudioSystem.getAudioFileFormat((InputStream) m_dataSource);
    }

我在尝试什么:

  m_audioInputStream = AudioSystem.getAudioInputStream(
                         m_dataSource instanceof URL?(URL)m_dataSource
                           :m_dataSource instanceof File?(File) m_dataSource
                             :m_dataSource instanceof InputStream ?(InputStream) m_dataSource
                               :(something other));

但我收到此错误:

类型 AudioSystem 中的方法 getAudioInputStream(InputStream) 不适用于参数 (((m_dataSource instanceof URL) ? (URL) m_dataSource : ((m_dataSource instanceof File) ? (File) m_dataSource : ((m_dataSource instanceof InputStream) ? (InputStream) m_dataSource : null))))

为什么默认选择InputStream?

编辑: m_dataSource 是对象。

一个三元运算符只能return同一类型的对象。在这种情况下,您的方法需要 InputStream,因此三元的所有实际可能都必须是 InputStream。我猜测 AudioSystem.getAudioInputStream() 已经覆盖了接受 URL、文件和 InputStream 的方法。