Generische Klassen und Initialisierung

aggroman

Lt. Junior Grade
Registriert
Sep. 2008
Beiträge
449
Tag,

folgender Array soll initialisiert werden, nur hab ich bisher noch garnichts mit generischen typen zutun gehabt vllt. kann mir einer helfen :)

Sobald ich varname[Index].Value = 0.0 durchführen möchte, bekomm ich einen fehler
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Wieso das ?

Hier der Codeausschnitt:


public class CPoint<S, T>
{
public S x;
public T y;

}


static void Main(string[] args)
{
CPoint<double, double>[] CList = new CPoint<double, double> [10];
...
}
 
mich wundert, dass du noch keine Fehlermeldung in deiner Main angezeigt bekommst. Du müsstest nämlich wenn dann nur die Wrapper verwenden können -> Double statt double.

Du hast auch nur ein leeres Array erzeugt. Du kannst nicht direkt auf irgendeinem index auf x oder y deines CPoint-Typs zugreifen. Da müssen erstmal CPoints rein..

also CList[0] = new CPoint();
Ein sinnvoller Konstruktor wäre hier auch hilfreich.
z.B.:
public CPoint(S x, T y) {
this.x = x;
thix.y = y;
}


dann klappt auch CList[0].x = 0,0;


Du kannst übrigens auch trotz der generischischen Typparameter eine gewisse Typsicherheit erzwingen, falls dein CPOint z.B. nur Zahlen aufnehmen darf.
Indem du schreibst: public class CPoint<S extends Number, T extends Number> erzwingst du, dass S und T typkompatibel zu Number sein müssen. Mit Number deckst du alle möglichen Zahlen ab: http://download.oracle.com/javase/6/docs/api/java/lang/Number.html
 
Zuletzt bearbeitet:
Die Sprache ist relativ egal. Aber ich tippe mal auf C# oder Java.
 
Sicher, dass folgendes nicht funktioniert?
Code:
static void Main(string[] args)
{
    CPoint<double, double>[] CList = new CPoint<double, double> [10];
    CList[0] = new CPoint<double, double>();
    CList[0].x = 1;
    CList[0].y = 2;
}
 
@aggroman
1. Die Frage steht immer noch im Raum: Welche Sprache?
2. Hier setzt dir niemand direkt eine fertig Lösung vor. Hilfestellungen gibt es, aber niemand wird dir die Arbeit abnehmen.
3. CPoint<double, double>[] CList = new CPoint<double, double> [10]; deklariert nur das Array. Jetzt musst du noch die einzelnen Elemente im Array deklarieren und anschließend initialisieren.
 
@TheCadillacMan vielen so funktioniert das

@ e-Laurin CSharp. Es tut keinem weh 2 zeilen Code hinzutackern, ich hab bisher halt nichts mit generischen typen gemacht
 

Ähnliche Themen

Zurück
Oben