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

私はあなたの質問を誤解したかもしれません。

remove通常のIterableがあり、それを呼び出すことができないイテレータを生成する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

適切なメッセージとともにメッセージをスローすることもできます。

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

クラスでは、元のメソッドを@Overrideするだけです。

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

次に、元のIterableの代わりにこのクラスのオブジェクトを作成します。

于 2012-12-05T03:12:46.043 に答える