2014년 5월 15일 목요일

Java Generic 클래스를 정의하고 그 클래스에서만 사용할 Exception 을 inner 클래스로 정의해서 사용하려 했더니 컴파일 에러가 난다. 하지만 그 Exception 을 static 으로 바꾸니 에러가 나지 않는다. 이유가 뭔가 했더니...


Java doesn't allow generic subclasses of Throwable. And, a nonstatic inner class is effectively parameterized by the type parameters of its outerclass (See Oracle JDK Bug 5086027). For instance, in your example, instances of your innerclass have types of form SomeGenericClass<T>.SomeInternalException. So, Java doesn't allow the static inner class of a generic class to extend Throwable.

static 으로 바꾸면 그 inner 클래스는 generic 클래스가 아니다.
A workaround would be to make SomeInternalException a static inner class. This is because if the innerclass is static its type won't be generic, i.e., SomeGenericClass.SomeInternalException.

자세한 내용은 아래 참조
http://stackoverflow.com/questions/13694637/making-the-inner-class-of-a-generic-class-extend-throwable


댓글 없음:

댓글 쓰기