我目前正在 JDK 1.8 上学习 lambda 表达式。我遇到了一些我发现我不明白的代码。
这是代码:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.lang.Comparable;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws Exception
{
List<String> list = Arrays.asList("a", "b", "c");
sort(list, Comparable::<String>compareTo);
}
interface MyComparable {
public <T extends Comparable<T>> int compare(T obj1, T obj2 );
}
public static <T extends Comparable<T>> void sort(List<T> list, MyComparable comp) {
int n = comp.compare("5","2");
System.out.println(n);
}
}
comp.compare("5", "3")
最终执行"5".compareTo("2")
。我的理解是编译器需要找到一个与签名相同的静态方法
public <T extends Comparable<T>> int compare(T obj1, T obj2 );
我已经创建了这样的方法并且它有效。我不明白为什么 java 编译器调用"5".compareTo("2")
. 他们的方法符号不一样。
关于编译器为什么生成这种代码的任何信息?