2012-12-05 96 views
3

如何在方法上抛出UnsupportedOperationException?所以,如果我有一个Iterable对象,并且试图禁止该对象的remove方法。在方法调用上抛出异常

在下面的方法中,我返回一个迭代器的remove的迭代对象,我需要通过抛出一个UnsupportedErrorException来禁用它。我可以在方法的主体内做到这一点,或者如何做到这一点?

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

在你的类你可以@Override原始方法

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

这个类,而不是原来的可迭代的然后创建对象。

0

你可以尝试用适当的消息抛出的讯息:

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

我可能误解了你的问题。

如果你有一个正常的可迭代,并希望将其转换为可迭代产生的迭代器上remove不能被调用,您可以使用这个畸形的匿名子类化成为可能:

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!"); 
      } 
     }; 
    } 
}; 
相关问题