java/7298: Can't call method of outer class from inner constructor
jmr@fulcrummicro.com
jmr@fulcrummicro.com
Fri Jul 12 19:26:00 GMT 2002
>Number: 7298
>Category: java
>Synopsis: Can't call method of outer class from inner constructor
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: rejects-legal
>Submitter-Id: net
>Arrival-Date: Fri Jul 12 18:46:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Jesse Rosenstock
>Release: 3.2 20020710 (experimental)
>Organization:
>Environment:
System: Linux churchill 2.4.3-12 #1 Fri Jun 8 15:05:56 EDT 2001 i686 unknown
Architecture: i686
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ./configure --prefix=/home/user/jmr/app/gcc
>Description:
A method of an outer class cannot be called from the inner class
constructor before the constructor for the inner class's superclass
has been called. The outer class has been constructed, so this
should be allowed.
>How-To-Repeat:
X.java:
public class X {
Object f() {
return null;
}
class XX {
XX() {
this(f());
}
XX(Object o) {
}
}
}
gcj -v X.java yields:
Reading specs from /home/user/jmr/app/gcc/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs
Reading specs from /home/user/jmr/app/gcc/lib/gcc-lib/i686-pc-linux-gnu/3.2/../../../libgcj.spec
rename spec lib to liborig
Configured with: ./configure --prefix=/home/user/jmr/app/gcc
Thread model: single
gcc version 3.2 20020710 (experimental)
/home/user/jmr/app/gcc/lib/gcc-lib/i686-pc-linux-gnu/3.2/jc1 X.java -fno-use-divide-subroutine -fuse-boehm-gc -fnon-call-exceptions -fkeep-inline-functions -quiet -dumpbase X.java -g1 -version -o /tmp/ccZQXE2X.s
GNU Java version 3.2 20020710 (experimental) (i686-pc-linux-gnu)
compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.1 2.96-85).
Class path starts here:
/home/user/jmr/gcj_test/inner2/
/home/user/jmr/app/gcc/share/java/libgcj-3.2.jar/ (system) (zip)
X.java: In class `X$XX':
X.java: In constructor `(X)':
X.java:7: error: Can't reference `this' before the superclass constructor has been called.
this(f());
^
1 error
This works with javac.
>Fix:
This could be worked around by passing a reference to the outer
class into the constructor.
public class X {
Object f() {
return null;
}
class XX {
XX(X x) {
this(x.f());
}
XX(Object o) {
}
}
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the Gcc-bugs
mailing list