-
Bug
-
Resolution: Fixed
-
P3
-
5.0
-
b40
-
generic
-
solaris_8
Reported at http://forum.java.sun.com/thread.jsp?forum=316&thread=467493&tstart=0&trange=50
Greetings: While working on examples to demonstrate inference I was using the following code:
public class Inference {
public static <Type> List<Type> someMethod(final Type obj) {
System.out.print("First");
return new LinkedList<Type>();
}
public static <Type extends Number> List<Type> someMethod(final Type num) {
System.out.print("Second");
return new LinkedList<Type>();
}
public static <Type> List<Type> someMethod(final Type num, List<Type> list) {
System.out.print("Third");
return new LinkedList<Type>();
}
public final static void main(final String[] args) {
// Simple
Object obj = somemethod("hello");
System.out.println("--> " + obj.getClass());
System.out.println("--> " + somemethod(new Object()).getClass());
System.out.println("--> " + somemethod(new Integer(5)).getClass());
System.out.println("--> " + somemethod(5).getClass());
System.out.println("--> " + somemethod().getClass());
System.out.println("--> " + somemethod(5, null).getClass());
}
}
Now if you will notice, I mislabeled someMethod() in my println to somemethod(). The resulting compile indicated the following errors:
C:\dev\hcj\tiger\src>c:\j2sdk1.5.0\bin\javac -source 1.5 oreilly/hcj/tiger/*.java
oreilly/hcj/tiger/Inference.java:42: cannot find symbol
symbol : method somemethod(java.lang.Object)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(new Object()).getClass());
^
oreilly/hcj/tiger/Inference.java:42: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(new Object()).getClass());
^
oreilly/hcj/tiger/Inference.java:43: cannot find symbol
symbol : method somemethod(java.lang.Integer)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(new Integer(5)).getClass());
^
oreilly/hcj/tiger/Inference.java:43: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(new Integer(5)).getClass());
^
oreilly/hcj/tiger/Inference.java:44: cannot find symbol
symbol : method somemethod(int)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(5).getClass());
^
oreilly/hcj/tiger/Inference.java:44: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(5).getClass());
^
oreilly/hcj/tiger/Inference.java:45: cannot find symbol
symbol : method somemethod()
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod().getClass());
^
oreilly/hcj/tiger/Inference.java:45: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod().getClass());
^
oreilly/hcj/tiger/Inference.java:48: cannot find symbol
symbol : method somemethod(int,<nulltype>)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(5, null).getClass());
^
oreilly/hcj/tiger/Inference.java:48: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(5, null).getClass());
^
10 errors
Now the cannot find symbol error I expected but the compiler internal error I did not expect. Did I just stumble on a bug or am I missing something here?
TIA.
Greetings: While working on examples to demonstrate inference I was using the following code:
public class Inference {
public static <Type> List<Type> someMethod(final Type obj) {
System.out.print("First");
return new LinkedList<Type>();
}
public static <Type extends Number> List<Type> someMethod(final Type num) {
System.out.print("Second");
return new LinkedList<Type>();
}
public static <Type> List<Type> someMethod(final Type num, List<Type> list) {
System.out.print("Third");
return new LinkedList<Type>();
}
public final static void main(final String[] args) {
// Simple
Object obj = somemethod("hello");
System.out.println("--> " + obj.getClass());
System.out.println("--> " + somemethod(new Object()).getClass());
System.out.println("--> " + somemethod(new Integer(5)).getClass());
System.out.println("--> " + somemethod(5).getClass());
System.out.println("--> " + somemethod().getClass());
System.out.println("--> " + somemethod(5, null).getClass());
}
}
Now if you will notice, I mislabeled someMethod() in my println to somemethod(). The resulting compile indicated the following errors:
C:\dev\hcj\tiger\src>c:\j2sdk1.5.0\bin\javac -source 1.5 oreilly/hcj/tiger/*.java
oreilly/hcj/tiger/Inference.java:42: cannot find symbol
symbol : method somemethod(java.lang.Object)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(new Object()).getClass());
^
oreilly/hcj/tiger/Inference.java:42: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(new Object()).getClass());
^
oreilly/hcj/tiger/Inference.java:43: cannot find symbol
symbol : method somemethod(java.lang.Integer)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(new Integer(5)).getClass());
^
oreilly/hcj/tiger/Inference.java:43: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(new Integer(5)).getClass());
^
oreilly/hcj/tiger/Inference.java:44: cannot find symbol
symbol : method somemethod(int)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(5).getClass());
^
oreilly/hcj/tiger/Inference.java:44: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(5).getClass());
^
oreilly/hcj/tiger/Inference.java:45: cannot find symbol
symbol : method somemethod()
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod().getClass());
^
oreilly/hcj/tiger/Inference.java:45: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod().getClass());
^
oreilly/hcj/tiger/Inference.java:48: cannot find symbol
symbol : method somemethod(int,<nulltype>)
location: class oreilly.hcj.tiger.Inference
System.out.println("--> " + somemethod(5, null).getClass());
^
oreilly/hcj/tiger/Inference.java:48: internal error; cannot instantiate println(boolean) at java.io.PrintStream to (<any>)
System.out.println("--> " + somemethod(5, null).getClass());
^
10 errors
Now the cannot find symbol error I expected but the compiler internal error I did not expect. Did I just stumble on a bug or am I missing something here?
TIA.