【问题标题】:Replace if else with ternary not working将 if else 替换为三元不工作
【发布时间】: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

标签: java ternary


【解决方案1】:

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

【讨论】:

  • 是的,但我想让代码更小,仅此而已。我不知道三元运算符只能返回相同类型的对象...谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
相关资源
最近更新 更多