Dem Objekt einen Wert zuweisen ?

desaster0505

Erfahrenes Mitglied
Hallo Leute ..
ich hab hier ne Klasse, bei der ich nicht verstehe wie ich einem Objekt davon einen Wert übergeben kann....

Code:
public class RoutingRequestVehicleType implements java.io.Serializable {
    private java.lang.String _value_;
    private static java.util.HashMap _table_ = new java.util.HashMap();

    // Constructor
    protected RoutingRequestVehicleType(java.lang.String value) {
        _value_ = value;
        _table_.put(_value_,this);
    }

    public static final java.lang.String _Truck = "Truck";
    public static final java.lang.String _Car = "Car";
    public static final java.lang.String _Pedestrian = "Pedestrian";
    public static final RoutingRequestVehicleType Truck = new RoutingRequestVehicleType(_Truck);
    public static final RoutingRequestVehicleType Car = new RoutingRequestVehicleType(_Car);
    public static final RoutingRequestVehicleType Pedestrian = new RoutingRequestVehicleType(_Pedestrian);
    public java.lang.String getValue() { return _value_;}
    public static RoutingRequestVehicleType fromValue(java.lang.String value)
          throws java.lang.IllegalArgumentException {
        RoutingRequestVehicleType enumeration = (RoutingRequestVehicleType)
            _table_.get(value);
        if (enumeration==null) throw new java.lang.IllegalArgumentException();
        return enumeration;
    }

ich deklariere das folgendermaßen :

Code:
RoutingRequestVehicleType Fahrzeugtyp=new RoutingRequestVehicleType();

Fahrzeugtyp.Pedestrian //klappt nicht
Fahrzeugtyp._Pedestrian //klappt auch nicht

Wie kann ich das denn festlegen bzw zuweisen ?

Danke schon mal für eure Hilfe
 
ja ja , das hatte ich auch schon probiert. Aber das hat nicht hingehauen.


String Fahrzeugtyp= "Pedestrian";

und das "Fahrzeugtyp" habe ich dem dann versucht zu übergeben. Das klappte aber nicht.
Muss ich danach noch irgendwas machen , nachdem ich dem Konstruktor den String angegeben habe ?
 
Moin!
// Constructor
protected RoutingRequestVehicleType(java.lang.String value) {
_value_ = value;
_table_.put(_value_,this);
}
Problem an der Sache, der Konstruktor ist protected, und kann daher nur in der Klasse selbst und in Erben dieser Klasse aufgerufen werden.
Aber, es gibt noch einen statischen Konstruktor:
public static RoutingRequestVehicleType fromValue(java.lang.String value)
throws java.lang.IllegalArgumentException {
RoutingRequestVehicleType enumeration = (RoutingRequestVehicleType)
_table_.get(value);
if (enumeration==null) throw new java.lang.IllegalArgumentException();
return enumeration;
}
Den rufst du folgendermaßen auf:
Code:
RoutingRequestVehicleType Fahrzeugtyp=RoutingRequestVehicleType.fromValue(RoutingRequestVehicleType._Pedestrian);
*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Hallo!

Problem an der Sache, der Konstruktor ist protected, und kann daher nur in der Klasse selbst und in Erben dieser Klasse aufgerufen werden.
Aber, es gibt noch einen statischen Konstruktor:
In Java gibt es keine statischen Konstruktoren. Das was man dort sieht ist eine statische "Factory" Methode.

Gruß Tom
 
Moin Tom!
Okay, ich hab Factory - Methode und statischer Konstruktor immer als äquivalent angesehen..
Dann halt mal meine Frage, auch wenn es ihn in Java nicht gibt, was ist denn dann statischer Konstruktor?

*grüssle*
MeinerEiner
 
Hallo!

Statische Konstruktoren gibts Beispielsweise in C#:
C#:
using System;
using System.Collections.Generic;
using System.Text;

namespace De.Tutorials.Training
{
    public class StaticConstructorExample
    {
        public static void Main(string[] args)
        {
            new Bubu();
            new Bubu();
            new Bubu();
        }
    }

    public class Bubu
    {
        public Bubu()
        {
            Console.WriteLine("Ctor");
        }

        static Bubu()
        {
            Console.WriteLine("static Ctor");
        }
    }
}

Ausgabe:
Code:
static Ctor
Ctor
Ctor
Ctor

In Java entspricht dies einem static Initializer Block:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 *
 */
public class StaticInitializerExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new Bubu();
        new Bubu();
        new Bubu();
    }
    
    static class Bubu{
        public Bubu(){
            System.out.println("Ctor");
        }
        
        static{
            System.out.println("Class initializer");
        }
    }
}

Ausgabe:
Code:
Class initializer
Ctor
Ctor
Ctor

Der static Initializer Block wird nur dann ausgeführt wenn die Klasse von einem ClassLoader geladen / initialisiert wird.

In Java gibt es aber noch zusätzlich einen Instance Initializer Block:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 * 
 */
public class StaticInitializerExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new Bubu();
        System.out.println("####");
        new Bubu();
        System.out.println("####");
        new Bubu();
    }

    static class Bubu extends Bobo{
        {
            System.out.println("Instance initializer Bubu");
        }

        public Bubu() {
            System.out.println("Ctor Bubu");
        }

        static {
            System.out.println("Class initializer Bubu");
        }
    }

    static class Bobo {
        public Bobo() {
            System.out.println("Ctor Bobo");
        }
    }
}

Ausgabe:
Code:
Class initializer Bubu
Ctor Bobo
Instance initializer Bubu
Ctor Bubu
####
Ctor Bobo
Instance initializer Bubu
Ctor Bubu
####
Ctor Bobo
Instance initializer Bubu
Ctor Bubu
Der Instance Initializer wird nach dem Konstruktor der Oberklasse aber noch vor dem Konstruktor der eigentlichen Klasse ausgeführt.

Eine Anwendung dafür schaut beispielsweise so aus:
Java:
        List<String> list = new ArrayList<String>(){
            {
                add("User");
                add("Helfen");
                add("Usern");
            }
        };
        System.out.println(list);

Gruß Tom
 
Zurück