2017-02-28 86 views
0

Android Studio爲我提供了一個在[java class]派生自[java class]的匿名類中的[java method] 「拋出CertificateException」以下代碼的一部分。該錯誤增加了:「重寫的方法不會拋出javax.security.cert.CertificateException」如何滿足編譯器?如何解決:在匿名類中的java方法派生自<class>與java方法發生衝突

坦率地說,我對將此理解爲解決方案本身的一般原因同樣感興趣。注意兩條註釋掉的行。我添加了它們來查看它是否會阻止錯誤,希望原因只是沒有代碼實際上拋出指定的異常。不工作。

如果正確的答案可以解釋這個問題的確切原因(我不明白爲什麼這是一個「匿名類」),我將非常感激。這個確切的代碼在很多網上的例子中使用,其中許多似乎以類似的方式使用它(見here)。

 X509TrustManager trustManager = new X509TrustManager() 
     { 
      @Override 
      public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException 
      { 
      //if (authType == null) 
      //  throw new javax.security.cert.CertificateException(); 
      } 

      @Override 
      public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException 
      { 
      } 

      @Override 
      public java.security.cert.X509Certificate[] getAcceptedIssuers() 
      { 
       return new java.security.cert.X509Certificate[]{}; 
      } 
     }; 
+0

爲什麼我的問題downvoted ??如果你想讓人們改變方式,這將有助於給出一個理由。我不介意改進我的問題,但你怎麼說都沒有提到。 – Alyoshak

+0

認爲這是一個合理的問題。錯誤消息顯然不會導致您查看導入,並且進入編碼的人員應該會感到很舒服,並提出問題。上投了反對票。 – mark

回答

2

你不能把CertificateException因爲X509TrustManager定義的方法不會拋出java.security.cert.CertificateException,這是不一樣的,你正試圖拋出一個。

javax.security.cert.CertificateException不同於java.security.cert.CertificateException

+0

你說得對。您是否介意修改您的答案以指定我也可以僅使用「throws java.security.cert.CertificateException」而不是「throws CertificateException」,這也將解決此問題。然後我會將你的答案標記爲正確答案。 – Alyoshak

+0

您應該修復您的導入,而不是在代碼中使用完全限定的名稱。刪除錯誤的導入並按下CTRL + Shift + O以優化Eclipse下的導入。 :) –

+0

好的。我去做。我正在使用Android Studio btw。 – Alyoshak