Von C# zu Java

  • 9 Antworten
  • Letztes Antwortdatum
N

Nexxee

Neues Mitglied
0
Hallo liebe Leute,

ich stehe gerade vor einem, ich denke relativ kleinem Problem.

Ich schreibe gerade eine library von C# in Java um. Es ist ein YouTube Parser.

Nun stelle ich mir folgende Frage.

In der Klasse aus C# habe ich eine Methode die so Aussicht

Code:
internal VideoInfo(int i)
               : this (i)
{ }

Wie wird dieser Aufruf nun in Java umgesetzt ?

Kann mir da eventuell jemand helfen ?

Mit freundlichem Gruß
 
Mit der gleichen Signatur dürfte das aber auch nicht in C# gehen (-> Rekursion + Zirkelbezug)

In Java kannst du innerhalb des Konstruktors einen anderen einfach mit "this(...)" aufrufen. (... natürlich durch Parameter falls vorhanden ersetzen).
 
Doch so ist es hier :)

Das weiß ich this.Speed z.B. aber das ich in der c# Klasse nicht der Fall...

Dort wird so die Methode geschrieben

Code:
internal static IEnumerable<VideoInfo> Default = new List<VideoInfo>
{ 
    new VideoInfo(1,2,3,4,5)
}

Internal VideoInfo (int a, int b, int c, int d, int e) : this(a,b,c,d,e)
{
}

Und das möchte ich umsetzten :-)
 
Internal VideoInfo (int a, int b, int c, int d, int e) ist aber keine Methode sondern ein Konstruktor.
Unter Java kann man Konstruktoren nicht so überschreiben.

Aber das macht bei Deinen Beispiel keinen Sinn. Denn du überschriebst den Konstruktor einfach nur.

In C# reicht da einfach base. In Java super.
Code:
C#:
Internal VideoInfo (int a, int b, int c, int d, int e) : base(a,b,c,d,e) {}

Java:
public VideoInfo (int a, int b, int c, int d, int e) {
       super(a,b,c,d,e);
}
 
ich habe auch nicht this.xxx (also Zugriff auf eine Property) geschrieben, sondern this(xxx) (also als Methoden-Aufruf).

Aber so wie du in dem Beispiel den Konstruktor schreibst, ergibt das überhaupt keinen Sinn, schließlich würde sich der Konstruktor doch selbst aufrufen! Sinnvoller wäre evtl. VideoInfo (int a, int b, int c, int d, int e) : base(a,b,c,d,e)



EDIT: Wenn ich dein Beispiel oben in C# umsetze, dann sagt er mir auch "Error CS0516 Constructor 'VideoInfo.VideoInfo(int, int, int, int, int)' cannot call itself".

EDIT 2: @markus.tullius: base != this - und man kann auch in Java von einem Konstruktor einen andere Implementierung aufrufen. Das muss aber die erste Anweisung in diesem Konstruktor sein.
-> Rheinwerk Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben
 
Es sind 3 constructors :) 2 davon rufen this als Methode auf. Sprich beider rufen die 3 Methode auf und über geben die Parameter die im this vorhanden sind ?

Da ich am Handy geschrieben habe und gerade schreibe ist es schlecht den gesamten code aus dem Kopf aufzuschreiben. Ich war der Meinung das dieses Beispiel reicht.

Also kann ich : this() auch in Java verwenden ?

EDIT:
Danke für den link, letzte Frage selber beantwortet. Ja ich kann nur nicht mit : sondern in den {}.

Merci
 
@Thyrion, ich lerne gerne dazu, die Konstruktion habe es noch nie gebraucht (Irgendwann gesehen, und wieder vergessen ;) ). Da benutze ich lieber eine Factory. Wollte Dir nicht auf die Füße treten.

@Nexxee, warum übersetzt du den C#-Code in Java-Code. Youtube hat extra eine API für Java zu Verfügung gestellt:
YouTube Data API  |  Google Developers

und es gibt auch eine API für den Player unter Android:
YouTube Android Player API
 
@markus.tullius: Kein Problem :thumbsup:
 
@markus.tullius
dieser Code hat eine andere Aufgabe :) Hat nichts mit der API zu tun.
Daher der umstieg von C# auf Java :)
 
Bin nur darauf gekommen, weil Deine Klasse VideoInfo heißt. Die API ist sehr nützlich, wenn man die Informationen zu den Youtube Videos auslesen will. Man bekommt ein praktisches Json, wo alle Infromation (Titel, Beschreibung, Datum d. Veröffentlichung usw) stehen.

Nachtrag:
Ich meine nicht die API zum Abspielen der Videos.
 
  • Danke
Reaktionen: Nexxee
Zurück
Oben Unten