将 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 的方法。
我正在尝试用三元表达式替换这段代码:
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 的方法。