2013-03-25 13 views
31

Arayüzün bir istisna attığı bu kodu okudum, ancak bunu uygulayan sınıf bir tane atmıyor ya da birini yakalamıyor, neden bu? Java'da yasal mı, güvenli mi?Java arayüzü bir istisna atar ancak arayüz uygulaması bir istisna alamaz?

import java.rmi.*; 
public interface MyRemote extends Remote { 
    public String sayHello() throws RemoteException; 
} 

import java.rmi.*; 
import java.rmi.server.*; 
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{ 
    public String sayHello() { 
     return "Server says, 'Hey'"; 
    } 
    public MyRemoteImpl() throws RemoteException {} 
    public static void main (String[] args) { 
     try { 
      MyRemote service = new MyRemoteImpl(); 
      Naming.rebind("RemoteHello", service); 
     } catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 
+2

http://www.coderanch.com/t/399874/java/java/Methods-throwing-Exception-Interface –

+2

adresindeki tartışmaya göz atmak isteyebilirsiniz. Evet yasal. Ve sen, CHetter'ın gönderdiği bağlantıyı görmeli ve cevap olarak da göndermeliydin .. – Thihara

+0

Teşekkürler Thihara. Bunu yaptın. –

cevap

47

uygulanması ve uzanan genel bir kural, yeni sınıf veya arabirim "daha az kısıtlayıcı" ama "daha kısıtlayıcı" değil kazanılabilmesi. Bir istisnayı bir kısıtlama olarak ele alma gereğini düşünüyorsanız, istisnayı beyan etmeyen bir uygulama daha az kısıtlayıcıdır. Arabirime kod atan herhangi biri sınıfınızla ilgili sorun yaşamaz.

— stan James


bir Java yöntemi bir arayüz de tanımlanan bir yöntem, bir üst sınıfta bir geçersiz veya uygulayan http://www.coderanch.com/t/399874/java/java/Methods-throwing-Exception-Interface

+1

Açık bir açıklama için teşekkür ederiz. Mantıklı –

11

tartışma bir parçası olarak, bu ek kontrol edilen istisnalar atmayabilir, ancak daha az atabilir. (%). geçersiz kılınan yöntemde bildirildi. Hatta SerialException gibi bir alt sınıf ile değiştirilebilir.

RuntimeException; bunlar herhangi bir yerde kullanılabilir. NamingException yasal değildir. Alt öğe olarak bile RuntimeException değil ve A listesinde yok.

İlgili konular