java - 能够在不引用父类的情况下实例化静态内部类

标签 java arraylist collections static comparator

在开始之前,我想指出这篇文章不是以下内容的重复:

How to instantiate non static inner class within a static method

Why instantiation of static nested class object is allowed?

事实上,我想听听为什么它在我的示例代码中表现异常。 据我了解,我们可以像这样实例化一个静态内部类:

new OuterClass.InnerClass();

但是在我的示例代码中,我能够实例化静态内部类,例如:

new InnerClass();

我将把我的示例代码放在这里:

import java.util.*;

class GFG {

static class ListComparator implements Comparator<Integer>{

            @Override
            public int compare(Integer o1, Integer o2){
                if(o1>o2){
                    return -1;
                }
                else if(o1<o2){
                    return 1;
                }
                else
                    return 0;
            }
}

public static void main (String[] args) {
    //code
    List<Integer> list = new ArrayList<Integer>();
    list.add(3);
    list.add(1);
    list.add(2);
    list.add(4);
    Collections.sort(list,new ListComparator());    
    for(Integer i : list){
        System.out.println(i);
    }

 }
}

上面的代码运行没有任何错误,我得到的输出是按降序排列的。 谁能解释一下我如何能够像这样直接实例化静态内部类:new ListComparator();

在这种情况下,我原以为会出错,但对输出结果感到惊讶。我知道我的静态内部类实现了 Comparator 接口(interface),但我想知道将其设为静态会引发与静态类行为的冲突。 但令人惊讶的是没有发生,我很好奇为什么没有发生?

最佳答案

答案很简单,静态内部类和main方法在同一个范围内。因此,没有必要从 GFG 中显式引用它(尽管您可以根据需要进行引用)。

可以这样想。如果您在 GFG 中有另一个静态方法,例如 static void foo() ,则无需在 main 方法中将其称为 GFG.foo() 。静态内部类也是一样。

关于java - 能够在不引用父类的情况下实例化静态内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45815018/

相关文章:

Java 通过引用传递 boolean 列表

java - IndexOutOfBoundsException 故障排除提示

python - 如何在 Python 中创建列表?

hibernate 集合缓存 : How to use?

java - 为什么 java 编译器在实际编译之前剥离所有 unicode 字符?

java - 批量插入修改后启动 Neo4j 服务器变慢

java - 高效存储三元组

java - 将 ArrayList<String> 数据转换/传输到 String[] 时出现不兼容类型错误

java - primitive == Wrapper 转换为 primitive == primitive 或 Wrapper == Wrapper?

python - 如何访问存储为数据帧中的列的集合计数器的元素以在 CountVectorizer 中使用