tôi sẽ cung cấp cho các câu trả lời cho các lỗi biên dịch 1 và tiếp tục đào để xem nếu tôi có thể tìm ra một cho lỗi biên dịch 2nd ...
Chạy sau tự sản xuất không có lỗi sử dụng jdk1 .5.0_22:
System.out.println(Arrays.asList(new float[1]).size());
Chạy điều này bằng cách riêng của mình ...
System.out.println(Arrays.asList(new float[1], new float[3]).size());
sản xuất lỗi biên dịch khó chịu này ...
An exception has occurred in the compiler (1.5.0_22). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: unexpected type: <nulltype>
at com.sun.tools.javac.tree.TreeMaker.Type(TreeMaker.java:531)
at com.sun.tools.javac.tree.TreeMaker.Type(TreeMaker.java:525)
at com.sun.tools.javac.comp.Lower.boxArgs(Lower.java:2510)
at com.sun.tools.javac.comp.Lower.visitApply(Lower.java:2420)
at com.sun.tools.javac.tree.Tree$Apply.accept(Tree.java:813)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.comp.Lower.visitSelect(Lower.java:3019)
at com.sun.tools.javac.tree.Tree$Select.accept(Tree.java:987)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.comp.Lower.visitApply(Lower.java:2474)
at com.sun.tools.javac.tree.Tree$Apply.accept(Tree.java:813)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1893)
at com.sun.tools.javac.comp.Lower.boxArgs(Lower.java:2517)
at com.sun.tools.javac.comp.Lower.visitApply(Lower.java:2420)
at com.sun.tools.javac.tree.Tree$Apply.accept(Tree.java:813)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.tree.TreeTranslator.visitExec(TreeTranslator.java:227)
at com.sun.tools.javac.tree.Tree$Exec.accept(Tree.java:728)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:54)
at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:145)
at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:2933)
at com.sun.tools.javac.tree.Tree$Block.accept(Tree.java:535)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:129)
at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2267)
at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2186)
at com.sun.tools.javac.tree.Tree$MethodDef.accept(Tree.java:478)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:1989)
at com.sun.tools.javac.tree.Tree$ClassDef.accept(Tree.java:434)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1901)
at com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:3070)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:487)
at com.sun.tools.javac.main.Main.compile(Main.java:592)
Vì vậy, tôi đã làm theo lời khuyên của trình biên dịch và đã thực hiện một số tìm kiếm trên cơ sở dữ liệu lỗi của Oracle và tìm thấy lỗi bằng cách tìm kiếm "java.lang.AssertionError: unexpected type:". Bạn có thể xem tại đây: Primitive arrays and varargs inference leads to crash in TreeMaker.Type(TreeMaker.java:531)
Sử dụng lớp trình bao nổi là công việc xung quanh khi bạn phát hiện ra.
EDIT - câu trả lời cho lỗi biên dịch 2
tôi tin rằng các lỗi biên dịch thứ 2 là một lỗi và tôi đã gửi nó vào Bug Database
tôi đã có thể biên dịch danh sách sau đây, chìa khóa và so sánh của mình không có lỗi biên dịch:
List<float[]> list=new ArrayList<float[]>();
list.add(new float[] {0.0f});
list.add(new float[] {1.0f});
float[] key = new float[2];
Comparator<float[]> c = new Comparator<float[]>() {
public int compare(float[] f1, float[] f2) {
return f1.length - f2.length;
}
};
Khi tôi cố gắng chạy "Collections.binarySearch (danh sách, chìa khóa, c)" với họ, tôi nhận được báo lỗi "không thể tìm thấy biểu tượng". Nếu tôi thay đổi "float" thành "Float", nó sẽ biên dịch tốt với cả hai trường hợp.
Tôi tin rằng danh sách, chìa khóa và so sánh tôi đã đăng ở trên đáp ứng các hợp đồng tìm kiếm nhị phân hoàn toàn theo Java 5 spec on it
http://stackoverflow.com/questions/788433/can-you-pass-an-int-array-to-a-generic-method-in-java điều này có thể cung cấp cho bạn một số thông tin chi tiết –
Tôi đã sao chép mã như là và có thể biên dịch và chạy nó mà không có lỗi dưới jdk1.5.0_22. – r3nj1
Lạ. Bạn đã sử dụng javac do Oracle cung cấp chưa? Sử dụng nhật thực, nó hoạt động cho tôi. – mravn