你能解释为什么以下有效吗?
public class GenericsTest<T> {
public void doSomething(T v1, T v2) {
}
public static <T> void doSomethingStatic(T v1, T v2) {
}
public static <T> void doSomethingStaticList(List<T> v1, List<T> v2)
{
}
public static void main(String[] args) {
GenericsTest<String> gt = new GenericsTest<>();
// OK
gt.doSomething("abc", "abc");
// Not OK
gt.doSomething(1, "abc");
// OK
doSomethingStatic(1, 2);
// Still OK
doSomethingStatic(1, "abc");
// So why is this not OK?
List<String> list1=new LinkedList<>();
List<Integer> list2=new LinkedList<>();
doSomethingStaticList(list1,list2);
}
}
Run Code Online (Sandbox Code Playgroud)
T v1, …
我知道java编译器实际上可以重新排序代码指令.但java可以重命令函数调用吗?
例如:
...
//these lines may be reordered
a=7;
b=5;
...
//but what about this?
callOne();
callTwo();
Run Code Online (Sandbox Code Playgroud) 这是代码:
public static String readFile(InputStream is) {
try (Scanner scanner = new Scanner(is); Scanner delimitedScanner = scanner.useDelimiter("\\A");) {
return scanner.hasNext() ? scanner.next() : "";
}
}
Run Code Online (Sandbox Code Playgroud)
findbugs 插件说:
已知非空值的冗余空检查 此方法包含对已知非空值与常量 nul 的冗余检查
并指出这一点:
return scanner.hasNext() ? scanner.next() : "";
} //this line contains bug!!!
}
Run Code Online (Sandbox Code Playgroud)
看图:
eclipse 显示相同的警告: