2012-12-05 5 views
3

메서드에서 UnsupportedOperationException을 throw하는 방법은 무엇입니까? 그래서 만약 내가 반복 가능한 개체가 있고 그 개체에 대한 제거 메서드를 허용하지 않으려 고합니다.메서드 호출시 예외가 throw됩니다.

아래의 메소드에서 iterator의 remove를 UnsupportedErrorException을 throw하여 비활성화해야하는 반복 가능한 객체를 반환합니다. 방법의 본문 내에서 또는 이렇게 할 수 있습니까?

public Iterable<String> getInNodes (String destinationNodeName) { 
    if (!hasNode(destinationNodeName)) 
     return emptySetOfString; 
    else { 
    for(String e : nodeMap.get(destinationNodeName).inNodes) 
    { 
     emptySetOfString.add(e); 
    } 
    return emptySetOfString; 
    } 
} 
+2

'던져 새로운 UnsupportedOperationException()'? –

답변

5

시도해보십시오.

@Override 
public void remove() { 
    throw new UnsupportedOperationException(); 
} 
0

클래스에서 당신은 원래의 방법을 대신 원래의 Iterable의이 클래스의

public class myIterable extends Iterable { 
    @Override 
    public void remove() { 
     throw new UnsupportedOperationException(); 
    } 
} 

그런 다음 만들 개체 @Override 수 있습니다.

0

당신은뿐만 아니라 적절한 메시지와 함께 메시지를 던지는 시도 할 수 있습니다 :

public void remove() { 
    throw new UnsupportedOperationException("Remove is unsupported on this object"); 
} 
2

나는 당신의 질문을 오해 할 수있다.

당신은 정상의 Iterable을 가지고, 당신은 remove, 당신은 익명의 서브 클래스에 의해 가능하게이 괴물 사용하여 호출 할 수 없습니다 수있는 반복자에서 생성되는의 Iterable로 변환하려면 :

Iterable<String> iterable = // normal Iterable<String> you already have... 

Iterable<String> noRemoveIteratorGeneratingIterable = new Iterable<String>() { 
    @Override   
    public Iterator<String> iterator() { 
     return new Iterator<String>() { 
      Iterator<String> internalIterator = iterable.iterator(); 

      @Override 
      public boolean hasNext() { 
       return internalIterator.hasNext(); 
      } 

      @Override 
      public String next() { 
       return internalIterator.next(); 
      } 

      @Override 
      public void remove() { 
       throw new UnsupportedOperationException("Nope!"); 
      } 
     }; 
    } 
}; 
관련 문제