static class InterruptibleString implements CharSequence { S inner; *() {} *(S *inner) {} @Override public char charAt(int index) { ping(); ret inner.charAt(index); } @Override public int length() { ret inner.length(); } @Override public CharSequence subSequence(int start, int end) { ret new InterruptibleString(inner.substring(start, end)); } @Override toString { ret inner.toString(); } }