用三元无效替换if else

时间:2015-10-27 00:26:02

标签: java ternary

我试图用三元表达式替换这段代码:

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是Object。

1 个答案:

答案 0 :(得分:1)

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