【发布时间】:2015-10-27 00:26:01
【问题描述】:
我正在尝试用三元表达式替换这段代码:
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 是对象。
【问题讨论】:
-
我是否遗漏了什么——你检查 m_dataSource 是一个 URL,然后你将它转换为一个 URL,它已经是一个 URL?这似乎没有多大意义。
-
它似乎没有解析三元条件。
-
@Engineer Dollery 我正在尝试替换我上面提到的 if else 如果第一个是假的,如果第一个是假的,那就去其他如果真得到这个......等等
-
是的,我可以看到,我想知道为什么 - 除了对方法的调用,您不需要任何代码,无需任何类型转换或类型检查。跨度>
-
@howTo 我认为他的意思是,如果您正在检查它是否是 URL,那么为什么要将其转换为条件内的 URL