这是有效的Java吗?
import java.util.Arrays;
import java.util.List;
class TestWillThatCompile {
public static String f(List<String> list) {
System.out.println("strings");
return null;
}
public static Integer f(List<Integer> list) {
System.out.println("numbers");
return null;
}
public static void main(String[] args) {
f(Arrays.asList("asdf"));
f(Arrays.asList(123));
}
}
Run Code Online (Sandbox Code Playgroud)
我的Java理论的理解说没有!
知道JLS对它的评价会很有趣.
我们怎么能用番石榴做到这一点?请注意List<K>
返回类型中存在,因为许多键可以映射到任何法线贴图中的相同值.
public static <K, V> Map<V, List<K>> inverse(Map<K, V> map){
Map<V, List<K>> result = new LinkedHashMap<V, List<K>>();
for (Map.Entry<K, V> entry : map.entrySet()) {
if(!result.containsKey(entry.getValue())){
result.put(entry.getValue(), new ArrayList<K>());
}
result.get(entry.getValue()).add(entry.getKey());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
BiMap
似乎坚持价值观的独特性,但我没有这种奢侈.
虽然f1
编译,非常相似f2
不会,我只是无法解释原因.(在Intellij 9和Eclipse 3.6上测试过)
而且我真的以为我已经完成了这样的问题.
import java.util.*;
public class Demo {
public List<? extends Set<Integer>> f1(){
final List<HashSet<Integer>> list = null;
return list;
}
public List<List<? extends Set<Integer>>> f2(){
final List<List<HashSet<Integer>>> list = null;
return list;
}
}
Run Code Online (Sandbox Code Playgroud) 如您所见,具有非void返回类型非常重要.
class TestValid {
public String f(List<String> list) {
return null;
}
public Integer f(List<Integer> list) {
return null;
}
public void test() {
f(Arrays.asList("asdf"));
f(Arrays.asList(123));
}
}
class TestInvalid {
public void f(List<String> list) {
System.out.println("strings");
}
public void f(List<Integer> list) {
System.out.println("numbers");
}
}
Run Code Online (Sandbox Code Playgroud)