Skip to content

Instantly share code, notes, and snippets.

@kijuky
Created September 4, 2011 12:19
Show Gist options
  • Save kijuky/1192784 to your computer and use it in GitHub Desktop.
Save kijuky/1192784 to your computer and use it in GitHub Desktop.
IllegalAccessError (Appトレイトを使ってないバージョン)
package test;
public class A {
protected int i; // ← コンストラクタ起動時にこいつにアクセスすると IllegalAccessError
public A(int i) {
this.i = i;
}
}
import test._
object Sample {
def main(args: Array[String]) {
new B(1) {
new B(i) // 問題なし
}
new B(1) {
new B(i){} // 問題なし
}
new A(1) {
new A(i) // 問題なし
}
new A(1) {
new A(i){} // throw IllegalAccessError
}
}
}
package test {
class B(protected[test] var i: Int)
}
import test.*;
class SampleJ {
public static void main(String[] args) {
new A(1) {
/* initializer */ {
new A(i) { // 問題なし
};
}
};
}
}
> mkdir test
> copy A.java test\A.java
> javac SampleJ.java
> java SampleJ
> scalac Sample.scala
> scala Sample
java.lang.IllegalAccessError: tried to access field test.A.i from class Sample$$
anon$5$$anon$6
at Sample$$anon$5$$anon$6.<init>(Sample.scala:18)
at Sample$$anon$5.<init>(Sample.scala:18)
at Sample$.main(Sample.scala:17)
at Sample.main(Sample.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClass
Loader.scala:78)
at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoade
r.scala:24)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaC
lassLoader.scala:88)
at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scal
a:78)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLo
ader.scala:101)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:33)
at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:40)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala
:56)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment