2014-02-18 4 views
0

의 원인,하지만 난 자바부족/구현 된 인터페이스의 작업이 명백한 경우 ** 확실하지 않은 오류

내가 구현하는 저를 필요로 광산의 클래스에 대한 할당을 완료하기 위해 노력 해왔다를 쓰고 있어요 클래스에 대한 ListIterator<String> 인터페이스 인터페이스의 선택적 메소드 인 remove(), add() 또는 set()을 구현하고 싶지 않습니다. 하지만 이제 구현되었으므로 Eclipse에서 이러한 메소드를 구현해야한다는 오류가 발생합니다. 누구나 그것이 왜 또는 어떻게 해결할 수 있는지 알고 있습니까? 당신의 도움에 미리 감사드립니다.

+1

'인터페이스에 대한 선택적 메소드 '는 틀린 것이고, 인터페이스는 계약입니다. 항상 그것을 구현 한 빈 구현을 제공 할 수 있습니다 !! – nachokk

답변

2

그들은 실제로 선택 사항이 아닙니다.

당신은 구현의 일종을 제공해야하지만, 그것은 단지 예외가 발생 구현 제공하는 것이 일반적이다 :

public void remove() { 
    throw new UnsupportedOperationException(); 
} 

하는 것은 어떤 상황에서는 또한 "하지 않는다 - 아무것도"구현을 제공하는 것이 합리적 일 수를 :

public void remove() { 
    // Can't remove... 
} 

이 중 하나를 수행하면 수행 한 것으로 기록하는 것이 좋습니다.

이 클래스를 추상 클래스로 만들면이 특정 클래스에 메서드를 구현할 필요가 없습니다. 그러나 어떤 점에서는 클래스 계층 구조 아래에서 모든 메서드를 사용하여 구체적인 클래스를 구현해야합니다. 인스턴스에서 클래스를 인스턴스화 할 때까지 실제로 아무 일도 일어나지 않으며 추상 클래스를 사용하여 클래스를 인스턴스화 할 수 없습니다.

+0

일반적으로 대부분의 경우 최선책은 아닙니다. – nachokk

+0

고마워, 나는 이것을 확실히 할 것이다. 괜찮으 시다면, 한 가지 질문을하겠습니다. 이클립스는 내 수업을 추상적 인 수업으로 만들 것을 제안했으며, 내 인터넷 검색에서 알 수있는 한 그 방법을 구현하지 않아도됩니다. 그러나, 그것은 마치 인터페이스의 구현을 처음부터 쓸모 없게 만드는 것처럼 보입니다. 그게 바람직한 선택이 될만한 이유가 있습니까? 도와 줘서 고마워. – LadyKillaCaillou

+0

문서화 된 경우이를 수행하는 것이 합리적입니다. 물론 인터페이스의 주된 목적에 꼭 필요한 메소드가 아닙니다. 하지만 조금 편집하겠습니다 ... –

0

인터페이스 메서드는 선택 사항이 아니고 지정된 인터페이스를 구현하는 클래스가 추상 클래스가 아닌 한 모든 메서드를 구현한다는 점을 보증합니다. 클래스가 특정 인터페이스를 구현할 때 Java에서 다형성의 개념에 따라 인터페이스의 유형이라고 할 수 있습니다. 아래

예 :

public interface Herbiverous { 
    void eatsPlants(); 
} 

public class Human implements Herbiverous{ 
    public void eatsPlants() { 
     System.out.println("I eat plants"); 
    } 

    public static void main(String[]args) { 
     Herbiverous h = new Human(); 
     //in which case you can only apply the methods of the interface 
     h.eatsPlants(); 
    } 
} 

희망이 통찰력이었다.

관련 문제