2017-02-27 2 views
-2

Ich versuche, einige sehr alte C# (. Net 2.0) Code von mir in Java umzuschreiben. Programm ist einfach, aber ich eher zufällig auf diesem Teil, das ich keine Ahnung, wie in Java übertragen:Java-Äquivalent von C# -Code

public ISomething listContainsType(Type typeToCheck) { 
     foreach(ISomething obj in _List) 
      if (obj.GetType() == typeToCheck) 
       return obj; 

     return null; 
    } 

also Code oben durch Liste geht nur zu wissen, dass jedes Element „ISomething“ implementiert und überprüft eigentlich die Klasse implementiert sagte Schnittstelle. Zumindest, wie es mit .Net 2.0 funktioniert.

Was wäre Java-Äquivalent des obigen Codes?

Ich weiß, dass über Zeilen geben, dass "Code-Geruch", aber vor dem Refactoring ich möchte es umschreiben "wie es ist", so dass ich das Endprodukt mit den gleichen Testmethoden testen kann.

+2

StackOverflow ist kein Codeübersetzungsdienst. Was hast du probiert? –

Antwort

0

Java entspricht Type ist Class. Other than that, es ist im Grunde das gleiche:

public ISomething listContainsType(Class<?> typeToCheck) { 
    for (ISomething obj : _List) 
     if (obj.getClass() == typeToCheck) 
      return obj; 
    return null; 
} 

Sie es so nennen würde:

ISomething s = listContainsType(SomeType.class); 
0

Aus Gründen der Übung habe ich versucht, etwas entlang der Linien der Umsetzung:

static public ISomething listContainsType(Class<?> typeToCheck) { 
    for (ISomething obj : _List) 
     if (Arrays.stream(obj.getClass().getInterfaces()).anyMatch(typeToCheck::equals)) 
     return obj; 

    return null; 
} 

Rufen Sie es so: listContainsType (Serializable.class).

EDIT: @ shmosels Code testet, ob die Klasse einen bestimmten Typ hat. Mein Code testet, ob er eine bestimmte Schnittstelle implementiert. Welche Version Sie wollen, hängt von Ihren Bedürfnissen ab. Überprüfen Sie this question für die Implementierung von Code, der alle Schnittstellen untersucht, die eine Klasse (direkt oder indirekt) implementiert.