System.out.println(is.getClass().getName());

  • Themenstarter Themenstarter gustel
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

gustel

Gast
Servus,

ich versuche eine kleinen Wrapper zur schreiben, der es mir ermöglichen soll unabhängig von der Reihenfolge wieder aus einen stream zu lesen.

will also nicht
Code:
         is.readInt();
         is.readObject();
         .....

verwenden.
Hatte mir gedacht das läuft mit

Code:
System.out.println(is.getClass().getName());

Aber is nicht, da ich ja nur die class von meinem outputStream bekomme, wie kann ich es anstellen das ich auf das erste Object gehe und mir deren class ausgeben lasse?

Wenn einer ne idee hätte wäre das echt super,



Danke
 
wenn ichs vorher doch serialisiert hab, handelt es sich doch um obj.? oder hab ich da was falsch verstanden?
 
Verwende keine primitiven Typen, sondern die Wrapperklassen wie java.lang.Integer, ...Long etc.,
dann kannst du einfach readObject() verwenden und anhand der Klasse unterscheiden, was es ist.
 
gut ok, das is schonmal was, danke.

aber es muss doch eine möglichkeit geben, ähnlich wie ein courser, auf das erste object im stream zu zeigen und dann mit getClass().getName() auf dieses zuzugreifen.....
nur weiß ich nicht wie...
 
Hättest auch erwähnen können das is ein ObjectInputStream ist... :?
Lies das erste Object aus, dann kommst du auch an den Class-Name.
Was willst du damit eigentlich machen?
 
mahlzeit,

ja gut das erste objekt auslesen, aber zu dem zeipunkt hab ich mich doch bereits entschieden was ich auslesen will, like:

os.readInt();

Object i = is.readObject();
schmeißt ne fehlermeldung wenn ich ein Int vorfinden. Ich suche also nach ner möglichkeit einen Object auszulesen unabhängig vom Datentyp.

Auf diese Object will ich dann die getClass().getName() Methoden anwenden um zu ermitteln was es für eine Datentyp ist.

Haste eine idee???
 
Moin,

also nach meiner Auffasung ist das unmöglich. Woher soll der Interpreter denn wissen welches Objekt das nächste sein soll.

Beispiel: Es kommen 5, 5.5, 7.8

Das erste Element könnte ein short, long oder int sein
Das Zweite ein double oder float

???? Wie soll das denn gehen
 
mit der methode getClass().getName() kann man das schon machen. sind methoden von Object
und sebste nach einem cast weiß das Object von welcher class es ursprünglich war.

Es muss irgendwie ne möglichkeit geben ein Object aus dem stream zulesen und auf dieses dann diese methdeon anzuwenden.
Hatte mir mal gedacht das ich den gesamten objectstream in einen array einlesen, das klappt aber auch net so recht, das ich ja den array datentyp angeben muss.

So nen Käse. Hab in der api was gefunden, getField() bin mir aber net sicher, bzw. verstehen nicht was ein Field im zusammenhang mit objectstream seinen soll.
 
wranger hat gesagt.:
Beispiel: Es kommen 5, 5.5, 7.8

Das erste Element könnte ein short, long oder int sein
Das Zweite ein double oder float

???? Wie soll das denn gehen

Du hast mir auf die Frage nicht geantwortet!
Vielleicht ist es noch möglich alle in ein Objekt-Array zu bekommen. Aber wie willst du die ohne explizienten cast einem Typ zuweisen, da du diesen scheinbar nicht kennst ???:L
Auf diese Object will ich dann die getClass().getName() Methoden anwenden um zu ermitteln was es für eine Datentyp ist.

Tolle Idee, sagen wir in deinem Array aus Objekten steht 5,5.5, 7.8. Was sollte wohl passieren wenn du

Objektarray[2].getClass().getName();

machst? Was soll da denn vernünftiges bei rauskommen?

MfG
wranger
 
Ist eigentlich sinnlos weiter in diesen Thread zu schreiben, denn früher oder später läuft das mit Sicherheit wieder auf einen dynamischen Cast raus, der aus offensichtlichen Gründen nicht möglich ist..
 
Also ich hatte mir das mal ungefähr so vorgestellt :

Code:
import java.io.*;

class tier implements Serializable
{
	String name;
	int alter; 
	int gewicht;
	
	tier(String n, int a, int g)
	{
		this.name = n;
		this.alter =alter;
		this.gewicht = g;	
	}
	
	String getName()
	{
		return name;
	}
	
	int getalter()
	{
		return alter;
	}
	
	int getgewicht()
	{
		return gewicht;
	}
}


class katze extends tier 
{
	int anzahlMaeuse;
	
	katze(String n, int a, int g, int aM)
	{
		super(n, a, g);
		this.anzahlMaeuse=aM;
	}
	
	int getanzahlM()
	{
		return anzahlMaeuse;
	}
}

class hund extends tier 
{
	hund(String n, int a, int g)
	{
		super(n, a, g);
		
	}
	
	
}
import java.io.*;

class start
{
	
	public static void main(String args[])
	{
		katze mia = new katze("gustel", 3, 15, 100);
		hund hund = new hund("Herr Schmitt", 4, 40);
		
		
		try 
    	{
    		FileOutputStream fo = new FileOutputStream("tier.ser");
		   	ObjectOutputStream os = new ObjectOutputStream(fo);
		    
		    os.writeObject(mia);
		    os.writeObject(hund);  
		    os.close();
		    
		    /*Array Anlegen*/

			tier[] array = new tier[3];
			
			
			FileInputStream fi = new FileInputStream("tier.ser");
		    ObjectInputStream is = new ObjectInputStream(fi);
		    
		    
		    
		    array[0] = (tier)is.readObject();
		    array[1] = (tier)is.readObject();

		    System.out.println(array[0].getClass().getName());
		    System.out.println(array[1].getClass().getName());
		    
		    
    	}catch (Exception e) 
    	 {
      		System.err.println(e.toString());
    	 }
	}
}

Läuft ja auch wunder bar, nur wenn ich primitive Datentypen verwende kann ich sie nicth auf object casten und ich weiß einach nicht warum

Object a = (Object) os.readObject(); //geht einfach nicht bei primitiven datentypen
 
Anonymous hat gesagt.:
Also ich hatte mir das mal ungefähr so vorgestellt :
Läuft ja auch wunder bar, nur wenn ich primitive Datentypen verwende kann ich sie nicth auf object casten und ich weiß einach nicht warum

Object a = (Object) os.readObject(); //geht einfach nicht bei primitiven datentypen

Hmmm...Ich bin zwar nicht Experte, aber könnte es daran liegen, das sie primitive sind...
 
ÄÄÄÄhm geht doch mit primitiven Datentypen
Code:
class Start 
{ 
    
   public static void main(String args[]) 
   { 
     
       
       Integer a1 = new Integer(5);
       Double d1 = new Double(5.5);
      try 
       { 
          FileOutputStream fo = new FileOutputStream("tier.ser"); 
            ObjectOutputStream os = new ObjectOutputStream(fo); 
          
          os.writeObject(a1); 
          os.writeObject(d1);  
          os.close(); 
          
          /*Array Anlegen*/ 

         Number[] array = new Number[3]; 
          
          
         FileInputStream fi = new FileInputStream("tier.ser"); 
          ObjectInputStream is = new ObjectInputStream(fi); 
          
          
          
          array[0] = (Number)is.readObject(); 
          array[1] = (Number)is.readObject(); 

          System.out.println(array[0].getClass().getName()); 
          System.out.println(array[1].getClass().getName()); 
          
          
       }catch (Exception e) 
        { 
            System.err.println(e.toString()); 
        } 
   } 
}
Ausgabe:
java.lang.Integer
java.lang.Double

Ohne die jedoch vorher einem Objekt zuzuweisen wird das nei funktionieren!
 
@wranger
Das ist doch jetzt genau ohne primitive Datentypen .. die Wrapper-Klassen für primitive Datentypen sind ja Klassen (sonst würden sie wohl nicht so heissen)
Immerhin .. damit ist das Problem gelöst.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben