Re: [問題] Wrapping/Widening + Var-args

看板java作者 (減肥)時間13年前 (2010/09/08 10:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
How about this example method(5); .. void method(int... i) {System.out.print("int...");} void method(long... i) {System.out.print("long...");} 如果沒會錯意, 那3個步驟只能告訴我哪些method是符合資格的, 但並沒有提到當有多個候選人時該如何作選擇, 所以也不會提到ambiguous問題, 下面這篇文章和我有一樣的問題 http://java.itags.org/java-certification/337/ ※ 引述《tkcn (小安)》之銘言: : ※ 引述《bennylu (減肥)》之銘言: : : 在設計overloading method時, 如下: : : method(5); : : .. : : void method(long i) {} : : void method(Integer i) {} : : void method(int... i) {} : : 我們知道優先權順序是widening > wrapping > var-args, : : 但是如果將上述三者做一些組合, : : method(5); : : .. : : void method(long... i) {} : : void method(Integer... i) {} : : 照理說應該是 widening + var-args > wrapping + var-args, : : 但是compiler抱怨說 reference to "method" is ambiguous, : : 所以想來問一下各位先進, compiler在挑選overloaded method時詳細的演算法, : : 先謝謝啦 : 這不能算是演算法,只能算是規則吧。 : 根據 Java 1.5 Tiger - A Developer's Notebook : method resolution is a three-pass process: : 1. The compiler attempts to locate the correct method : without any boxing, unboxing, or vararg invocations. : This will find any method that would have been : invoked under Java 1.4 rules. : 2. If the first pass fails, the compiler tries method : resolution again, this time allowing boxing and : unboxing conversions. : Methods with varargs are not considered in this pass. : 3. If the second pass fails, the compiler tries method : resolution one last time, allowing boxing and unboxing, : and also considers vararg methods. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.239.172
文章代碼(AID): #1CXli5nS (java)
討論串 (同標題文章)
文章代碼(AID): #1CXli5nS (java)