import java.util.function.*;
class Test {
void test(int foo, Consumer<Integer> bar) { }
void test(long foo, Consumer<Long> bar) { }
void test(float foo, Consumer<Float> bar) { }
void test(double foo, Consumer<Double> bar) { }
}
可能模糊當我編譯這與javac -Xlint Test.java
我得到了一些警告:警告:重載]方法M1與M2的方法
Test.java:4: warning: [overloads] test(int,Consumer<Integer>) in Test is potentially ambiguous with test(long,Consumer<Long>) in Test
void test(int foo, Consumer<Integer> bar) { }
^
Test.java:6: warning: [overloads] test(float,Consumer<Float>) in Test is potentially ambiguous with test(double,Consumer<Double>) in Test
void test(float foo, Consumer<Float> bar) { }
^
2 warnings
如果我改變Consumer
到Supplier
警告消失。這個程序是免費的警告:
import java.util.function.*;
class Test {
void test(int foo, Supplier<Integer> bar) { }
void test(long foo, Supplier<Long> bar) { }
void test(float foo, Supplier<Float> bar) { }
void test(double foo, Supplier<Double> bar) { }
}
這是爲什麼?這個警告是什麼意思?這些方法如何模糊?壓制警告是否安全?
當您嘗試調用警告功能時會發生什麼? – 2015-03-19 02:46:29
看來只有在以下情況下才會發出警告:a。它是一個功能界面(即消費者,供應商),以及b。任何接口的方法都包含任何參數......作爲一項測試,我製作了我自己的消費者/供應商接口副本,並與他們一起分享。可悲的是我對Java功能知之甚少,不知道爲什麼會爲此產生警告。 – Kai 2015-03-19 02:57:41
更正:A點不正確,它不需要是功能接口,只有任何接口(類不產生警告),只定義了一個(非默認)方法。此外,我已將test(int,Consumer)的參數更改爲不可能像測試(對象,消費者)v.s一樣不明確的東西。測試(地圖,消費者),但警告仍然拋出。因此,除非你使用了一些非常古怪的編程,否則我真的不認爲你需要擔心這一點。 – Kai 2015-03-19 03:15:42