public class SortAnimal
{
public static Comparator<Animal> getAnimalTagComparator()
{
return getAnimalTagComparator();
}
class getAnimalTagComparator implements Comparator<Animal> {
@Override
public int compare(Animal o1, Animal o2) {
return o1.getTag()-o2.getTag();
}
}
我有另一个生成数组并调用的文件:
Comparator<Animal> getAnimalTagComparator = SortAnimal.getAnimalTagComparator();
为什么我在这一行上获得stackoverflow:return getAnimalTagComparator();
答案 0 :(得分:3)
getAnimalTagComparator()
递归地无限次地调用自身(或者至少在堆栈溢出之前)。这导致了堆栈溢出。
您应该为您的类和方法使用不同的名称,并将方法更改为:
public static Comparator<Animal> getAnimalTagComparator()
{
return new AnimalTagComparator();
}
并将课程更改为static class AnimalTagComparator
。 (static修饰符是必需的,因为AnimalTagComparator
类嵌套在SortAnimal
类中,并且不使其成为静态,您需要一个封闭的SortAnimal
实例才能创建一个isntance AnimalTagComparator
)。
答案 1 :(得分:1)
因为你的代码只是调用自己(你正在调用一个递归方法)。 由于没有终止此调用,因此您最终将获得StackOverflow错误
public static Comparator<Animal> getAnimalTagComparator()
{
return getAnimalTagComparator(); // yes this is THIS method
}
如果你想打电话给你可以做的其他课
public static Comparator<Animal> getAnimalTagComparator()
{
return new getAnimalTagComparator();
}