Ich bin Entwickler von C# Unity3D und musste vor kurzem in Java springen, um ein Plugin für ein Android-Spiel zu erstellen, an dem ich gerade arbeite. Kurz gesagt, dient dieses Plugin dazu, Java-Netzwerkfunktionen zu verwenden, damit ein Spieler ein Match, das er auf seinem Telefon hostet, für andere in einem LAN ausstrahlen lässt.Wo ist Enumeration <T> implementiert?
Für dieses Plugin musste ich alle Netzwerkschnittstellen auf dem Gerät bekommen, alle Local-Link- oder Loopback-IPs herausfiltern und dann (vorausgesetzt es gibt nur noch 1 Restadresse) die verbleibende Adresse für Broadcasting verwenden . Ich habe dies erfolgreich getan, aber ich konnte nicht von dieser Linie meines Codes gestört werden helfen:
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
ich in letzter Zeit mehr neugierig auf das Innenleben der Dinge geworden sind. Unity3D hat eine großartige API und Dokumentation, aber in letzter Zeit benutze ich die mitgelieferte IDE (MonoDevelop), um ihren verwalteten Quellcode zu sehen, damit ich besser verstehen kann, wie die Dinge gemacht werden. Diese Frage hilft mir wirklich wieder einmal dabei, meine Neugier zu wecken.
Ich möchte darauf hinweisen, sogar in C# Ich habe nicht wirklich mit Schnittstellen so nackig mit mir gearbeitet, während ich versuche, dies durcheinander zu bringen.
Also ... Enumeration ist eine Schnittstelle, die implizit abstrakt ist, und ihre Funktionen sind auch, was bedeutet, dass eine Klasse es implementieren muss, um das Verhalten ihrer Funktionen zu definieren.
Betrachtet man NetworkInterface auf docs.oracle.com, scheint es keine Enumeration zu implementieren, aber es hat eine Funktion (siehe oben), die mir eine Enumeration vom Typ NetworkInterface mit einer funktionierenden nextElement() - Funktion zurückgibt. Nicht nur das, sondern weil Enumeration eine Schnittstelle ist, wie kann eine Funktion mir sogar eine liefern? Schnittstellen, wie abstrakte Klassen, können nicht instanziiert werden, und dennoch wurde mir diese Enumeration-Instanz mit definierten Funktionen gegeben, die ich aufrufen kann und die Netzwerkschnittstellen enthält, nach denen ich gefragt habe.
Wenn es mir ein Objekt eines (offensichtlich nicht-abstrakten) Typs zurückgibt, der Enumeration implementiert hat und vielleicht ein privates Array vom Typ NetworkInterface hält, denke ich, dass all dies für mich mehr Sinn ergibt.
Vielen Dank im Voraus.
Schnittstellen sind wie ein Vertrag. Die von Ihnen erwähnte Methode gibt ein Objekt zurück, das dem durch 'java.util.Enumeration' definierten Vertrag gehorcht, aber nichts darüber hinaus verspricht.Dies ist nützlich, damit die Implementierung geändert werden kann, ohne dass einer der Clients sich darum kümmern muss. – biziclop
Vorschlag für das nächste Mal: Es gibt eine Menge von irrelevanter Exposition oben. Ich empfehle Ihnen, Ihre Frage klar und prägnant zu stellen. In diesem Fall könnte es etwa drei Sätze lang sein. –
@ T.J.Crowder bekannt. Sorry, wollte nur einige Hintergrundinformationen bereitstellen, so dass die Leute eine Vorstellung von meinem Wissensstand hatten und dass das Problem nicht war, dass der Code nicht funktionierte, es war nur eine Frage, wie es funktioniert. – isNull