cdm/src/main/java/ucar/nc2/ft/point/PointIteratorAdapter.java
@Override
    public PointFeature next() throws NoSuchElementException {
        if (!hasNext()) {
            throw new NoSuchElementException("The iteration has no more elements.");
        }

        PointFeature pointFeat = pointIter.next();
        assert pointFeat != null : "hasNext() should have been false. WTF?";

        calcBounds(pointFeat);
        return pointFeat;
    }
@Override
    public PointFeature next() throws NoSuchElementException {
        if (!hasNext()) {
            throw new NoSuchElementException("The iteration has no more elements.");
        }

        PointFeature pointFeat = pointIter.next();
        assert pointFeat != null : "hasNext() should have been false. WTF?";

        calcBounds(pointFeat);
        return pointFeat;
    }
but we can define a stronger contract.