2015-10-27 24 views
1

我試圖取代這段代碼與三元表達式:更換爲三元不工作

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 instan ceof文件)? (File)m_dataSource:((m_dataSource instanceof InputStream)?(InputStream)m_dataSource:null))))

爲什麼它默認選擇InputStream?

編輯: m_dataSource是Object。

+1

我錯過了什麼 - 你檢查m_dataSource是一個URL,然後你把它轉換成一個URL,它已經是?這似乎沒有多大意義。 –

+0

它似乎沒有解析三元條件。 – khuderm

+0

@Engineer Dollery我試圖替換,如果我已經提到上面,如果第一個是假的去其他如果真的得到這個...等等 – GOXR3PLUS

回答

1

三元運算符只能返回相同類型的對象。在這種情況下,您的方法預計爲InputStream,因此三元組的所有實際可能都必須是InputStream。我猜AudioSystem.getAudioInputStream()已經重寫了接受URL,File和InputStream的方法。

+0

是的,但我想讓代碼更小,這是所有的。我不知道三元運算符只能返回相同類型的對象.. 。 謝謝! – GOXR3PLUS