3

如何在方法上抛出和 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

4 回答 4

5

尝试这个。

@Override
public void remove() {
   throw new UnsupportedOperationException();
}
于 2012-12-05T03:09:50.593 回答
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!");
            }
        };
    }
};
于 2012-12-05T03:21:59.017 回答
0

在您的班级中,您可以 @Override 原始方法

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

然后创建这个类的对象而不是原来的 Iterable。

于 2012-12-05T03:12:46.043 回答
0

您也可以尝试使用适当的消息抛出消息:

public void remove() {
   throw new UnsupportedOperationException("Remove is unsupported on this object");
}
于 2012-12-05T03:13:26.087 回答