我试图用三元表达式替换这段代码:
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。
答案 0 :(得分:1)
三元运算符只能返回相同类型的对象。在这种情况下,您的方法期望InputStream
,因此三元组的所有实际可能必须是InputStream。我猜测AudioSystem.getAudioInputStream()
已经覆盖了接受URL,文件和InputStream的方法。