ObjectRange#size 버그를 발생할 소지가 있네요???

5 views
Skip to first unread message

양완수

unread,
Apr 6, 2012, 2:49:50 AM4/6/12
to KG...@googlegroups.com
public class ObjectRange ....{   
....
 public int size() {
        if (size == -1) {
            if ((from instanceof Integer || from instanceof Long)
                    && (to instanceof Integer || to instanceof Long)) {
                // let's fast calculate the size
                long fromNum = ((Number) from).longValue();
                long toNum = ((Number) to).longValue();
                size = (int) (toNum - fromNum + 1);

   .....
}

int  로 casting 하다 보니 두 범위의 크기는 int.MAXVALUE 를 넘기지 못하는......

양완수

unread,
Apr 6, 2012, 2:51:50 AM4/6/12
to KG...@googlegroups.com
times 도 마찬가지 ㅡㅡ;

    public static void times(Number self, Closure closure) {
        for (int i = 0, size = self.intValue(); i < size; i++) {
            closure.call(i);
            if (closure.getDirective() == Closure.DONE) {
                break;
            }
        }
    }

2012년 4월 6일 금요일 오후 3시 49분 50초 UTC+9, 양완수 님의 말:

Sungchul Park

unread,
Apr 6, 2012, 10:10:52 PM4/6/12
to kg...@googlegroups.com
size()의 시그니처는 java.util.AbstractCollection에서 정의되었기 때문에 int로 캐스팅하는 게 맞을 것 같네요.
ObjectRange의 크기가 Integer.MAXVALUE보다 커지는 건 실용적이지도 않은 것 같구요.
--
"한국 Groovy & Grails 사용자 그룹" 에 가입하셨기에 이 메시지를 보내드립니다
이 그룹에 게시하려면 다음 주소로 이메일을 보내주십시오.
KG...@googlegroups.com
이 그룹에서 탈퇴하시려면 다음으로 이메일을 보내주십시오.
KGGUG+un...@googlegroups.com
추가 옵션을 보려면 http://groups.google.com /group/KGGUG?hl=ko의 그룹을
방문하세요.

양완수

unread,
Apr 9, 2012, 12:23:22 AM4/9/12
to KG...@googlegroups.com, kg...@googlegroups.com
아 진짜  java.util.AbstractCollection.size 의 리턴이 int 이군요..
Integer.MAXVALUE 보다 큰 Collection이나 Range 는 실용적이지 않은건가요???



2012년 4월 7일 토요일 오전 11시 10분 52초 UTC+9, 박성철 님의 말:
size()의 시그니처는 java.util.AbstractCollection에서 정의되었기 때문에 int로 캐스팅하는 게 맞을 것 같네요.
ObjectRange의 크기가 Integer.MAXVALUE보다 커지는 건 실용적이지도 않은 것 같구요.
public class ObjectRange ....{   
....
 public int size() {
        if (size == -1) {
            if ((from instanceof Integer || from instanceof Long)
                    && (to instanceof Integer || to instanceof Long)) {
                // let's fast calculate the size
                long fromNum = ((Number) from).longValue();
                long toNum = ((Number) to).longValue();
                size = (int) (toNum - fromNum + 1);

   .....
}

int  로 casting 하다 보니 두 범위의 크기는 int.MAXVALUE 를 넘기지 못하는......
--
"한국 Groovy & Grails 사용자 그룹" 에 가입하셨기에 이 메시지를 보내드립니다
이 그룹에 게시하려면 다음 주소로 이메일을 보내주십시오.
KG...@googlegroups.com
이 그룹에서 탈퇴하시려면 다음으로 이메일을 보내주십시오.
Reply all
Reply to author
Forward
0 new messages