Java 其中是枚举<;T>;实施?

Java 其中是枚举<;T>;实施?,java,Java,我是一名C#Unity3D开发人员,最近我不得不跳入Java为我正在开发的android游戏创建插件。简单地说,这个插件的目的是使用java网络功能,这样玩家就可以在手机上广播他们正在主持的比赛,让其他人在局域网上找到 对于这个插件,我需要获得设备上的所有网络接口,过滤掉任何本地链接或环回IP,然后(假设只有一个剩余地址,应该有)使用剩余地址进行广播。我已经成功地做到了这一点,但我还是忍不住被这一行代码所困扰: Enumeration<NetworkInterface> interf

我是一名C#Unity3D开发人员,最近我不得不跳入Java为我正在开发的android游戏创建插件。简单地说,这个插件的目的是使用java网络功能,这样玩家就可以在手机上广播他们正在主持的比赛,让其他人在局域网上找到

对于这个插件,我需要获得设备上的所有网络接口,过滤掉任何本地链接或环回IP,然后(假设只有一个剩余地址,应该有)使用剩余地址进行广播。我已经成功地做到了这一点,但我还是忍不住被这一行代码所困扰:

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
Enumeration interfaces=NetworkInterface.getNetworkInterfaces();
最近我对事物的内部运作越来越好奇。Unity3D有一个很棒的API和文档,但最近我一直在使用附带的IDE(MonoDevelop)来查看他们的托管源代码,以帮助我更好地理解事情是如何完成的,所以这个问题真的再次帮助了我的好奇心

因此,枚举是一个隐式抽象的接口,其函数也是隐式抽象的,这意味着类必须实现它来定义其函数的行为

查看docs.oracle.com上的NetworkInterface,它似乎没有实现枚举,但它有一个函数(如上图所示),可以向我返回NetworkInterface类型的枚举,并带有一个正常工作的nextElement()函数。不仅如此,因为枚举是一个接口,一个函数怎么能为我提供一个接口呢?接口,像抽象类一样,不能被实例化,但是我已经得到了这个枚举实例,它有我可以调用的定义函数,它保存着我所要求的网络接口

如果它返回给我一个实现枚举的某种(显然是非抽象的)类型的对象,可能持有NetworkInterface类型的私有数组,我认为所有这些对我来说都更有意义

查看docs.oracle.com上的NetworkInterface,它似乎没有实现枚举

没错,
NetworkInterface
本身实现
枚举
,没有多大意义,因为它不是枚举。相反,它有一个内部类,用于实现
枚举
,它是从
getNetworkInterfaces
接收的类的实例

这是一种常见的模式。您可以在JDK安装的
src.zip
中的
NetworkInterface.java
文件中看到实现:

public static Enumeration<NetworkInterface> getNetworkInterfaces()
    throws SocketException {
    final NetworkInterface[] netifs = getAll();

    // specified to return null if no network interfaces
    if (netifs == null)
        return null;

    return new Enumeration<NetworkInterface>() {              // This is the
        private int i = 0;                                    // anonymous
        public NetworkInterface nextElement() {               // inner class used
            if (netifs != null && i < netifs.length) {        // to implement
                NetworkInterface netif = netifs[i++];         // Enumeration<NetworkInterface>
                return netif;                                 //
            } else {                                          //
                throw new NoSuchElementException();           //
            }                                                 //
        }                                                     //
                                                              //
        public boolean hasMoreElements() {                    //
            return (netifs != null && i < netifs.length);     //
        }                                                     //
    };                                                        //
}
公共静态枚举getNetworkInterfaces() 抛出SocketException{ 最终网络接口[]netifs=getAll(); //指定为在没有网络接口时返回null 如果(netifs==null) 返回null; 返回新枚举(){//这是 private int i=0;//匿名 public NetworkInterface nextElement(){//使用了内部类 如果(netifs!=null&&i 在本例中,它是一个匿名的内部类。其他时候,它们被命名为内部类,例如
AbstractList.java
中的
Itr
(也在
src.zip
中)

查看docs.oracle.com上的NetworkInterface,它似乎没有实现枚举

没错,
NetworkInterface
本身实现
枚举
,没有多大意义,因为它不是枚举。相反,它有一个内部类,用于实现
枚举
,它是从
getNetworkInterfaces
接收的类的实例

这是一种常见的模式。您可以在JDK安装的
src.zip
中的
NetworkInterface.java
文件中看到实现:

public static Enumeration<NetworkInterface> getNetworkInterfaces()
    throws SocketException {
    final NetworkInterface[] netifs = getAll();

    // specified to return null if no network interfaces
    if (netifs == null)
        return null;

    return new Enumeration<NetworkInterface>() {              // This is the
        private int i = 0;                                    // anonymous
        public NetworkInterface nextElement() {               // inner class used
            if (netifs != null && i < netifs.length) {        // to implement
                NetworkInterface netif = netifs[i++];         // Enumeration<NetworkInterface>
                return netif;                                 //
            } else {                                          //
                throw new NoSuchElementException();           //
            }                                                 //
        }                                                     //
                                                              //
        public boolean hasMoreElements() {                    //
            return (netifs != null && i < netifs.length);     //
        }                                                     //
    };                                                        //
}
公共静态枚举getNetworkInterfaces() 抛出SocketException{ 最终网络接口[]netifs=getAll(); //指定为在没有网络接口时返回null 如果(netifs==null) 返回null; 返回新枚举(){//这是 private int i=0;//匿名 public NetworkInterface nextElement(){//使用了内部类 如果(netifs!=null&&i 在本例中,它是一个匿名的内部类。其他时候它们被命名为内部类,苏