在方法调用上抛出异常

时间:2012-12-05 03:07:39

标签: java exception error-handling throws

如何在方法上抛出和UnsupportedOperationException?所以,如果我有一个Iterable对象,并且我试图禁止该对象的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;
  }
}

4 个答案:

答案 0 :(得分:5)

试试这个。

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

答案 1 :(得分: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!");
            }
        };
    }
};

答案 2 :(得分:0)

在课堂上你可以@Override原始方法

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

然后创建此类的对象而不是原始的Iterable。

答案 3 :(得分:0)

您也可以尝试使用相应的消息抛出消息:

public void remove() {
   throw new UnsupportedOperationException("Remove is unsupported on this object");
}
相关问题