Serializacja

0

Witam
Mam dwie klasy. Z jednej ma pobierac dane a w drugiej ma serializowac.

import java.io.Serializable;
public class ClassToSerialize implements Serializable{

private Integer pole1;
private String pole2;
private transient int pole3; //nie będzie zserializowane


public Integer getPole1(){
	return  pole1;
}
public void setPole1(Integer pole1){
this.pole1=pole1;

}

itd

public String toString(){

	return "pole1: "+getPole1()+ " pole2: "+getPole2()+" pole3: "+
	getPole3();
}

}

W nastepnej klasie ma to pobrać. Wyskakuje jednak bład że integer nie może być serializowane. Cotrzeba zrobić? Jak zmienić tą klasę?

0
  1. W tym fragmencie kodu nie widzę błędu (na wszelki wypadek skompilowałem).
  2. Niepotrzebnie udziwniasz funkcję toString() - wewnątrz klasy masz dostęp do pól prywatnych
        public String toString(){
                return "pole1: "+pole1+ " pole2: "+pole2+" pole3: "+pole3;
        }

pozdrawiam

0

Witam.No niestety jest błąd.Wyskakuje komunikat:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method setPole1(Integer) in the type ClassToSerialize is not applicable for the arguments (int)
at exceptions.Main.main(Main.java:11)

Przesyłam klasę Main

import java.io.*;

public class Main {

public static String nazwaPliku = "serializeCTS.ser";

public static void main(String[] args) {
	ClassToSerialize cts = new ClassToSerialize();
	cts.setPole1(10);
	cts.setPole2("Probny obiekt");
	cts.setPole3(11);
	
	System.out.println("Dane do serializacji: " + cts);
	
	FileOutputStream fileOutputStream = null;
	ObjectOutputStream objectOutputStream = null;
	
	try {
		fileOutputStream =
			new FileOutputStream(nazwaPliku);
		
		objectOutputStream = new ObjectOutputStream(fileOutputStream);
		
		objectOutputStream.writeObject(cts);
		
		objectOutputStream.close();
		
	} catch(IOException e){
		
		System.out.println("Blad wejscia-wyjscia");
		
	} finally {
		cts = null;
	}
	
	ClassToSerialize ctsPoDeserializacji = null;
	ObjectInputStream objectInputStream = null;
	FileInputStream fileInputStream = null;
	
	try{
		fileInputStream = new FileInputStream(nazwaPliku);
		objectInputStream = new ObjectInputStream(fileInputStream);
		Object obiekt= objectInputStream.readObject();
		ctsPoDeserializacji = (ClassToSerialize) obiekt;
		objectInputStream.close();
	} catch(IOException e) {
		
		System.out.println("Blad wejscia-wyjscia");
		
	}catch(ClassNotFoundException e){
		
		System.out.println("Blad serializacji");
	}
	finally {
		
	}
	
	if(ctsPoDeserializacji != null){
		System.out.println("Dane po deserializacji: " 
				+ ctsPoDeserializacji);
	} else {
		
		System.out.println("Nie udało się zdeserializować danych.");
	}
}

}

import java.io.Serializable;

public class ClassToSerialize implements Serializable{

private Integer pole1;
private String pole2;
private transient int pole3;

public Integer getPole1() {
	return pole1;		
}

public void setPole1(Integer pole1) {
	this.pole1 = pole1;
}

public String getPole2(){
	return pole2;
}

public void setPole2(String pole2){
	this.pole2 = pole2;
}

public int getPole3() {
	return pole3;
}

public void setPole3(int pole3){
	this.pole3 = pole3;
}

//@Override

public String toString(){
	return "pole1: " + getPole1() + " pole2: " 
	+ getPole2()+ " pole3: " + getPole3();
}

}

Czekam na pomoc. Pozdrawiam

0

przeciez jest napisane ze kompilejszon error
nie ma automatycznego boxingu w javie

zamiast setPole1(10) zrob setPole1(new Integer(10))
albo zmien typ pola na int

0

nie ma automatycznego boxingu w javie

eee ja slyszalem ze jest ;). Z tym ze od 5.

0
gosc napisał(a)

nie ma automatycznego boxingu w javie

eee ja slyszalem ze jest ;). Z tym ze od 5.

aj istotnie jest, nawet nie zwrócilem uwagi. tylko kolega chyba musi miec jednak jakas starsza wersje
javy skoro mu taki blad polecial

w ogóle u mnie to nawet ten kod dziala ;-)

0

W przyszłości nie "tłumacz" komunikatów o błędach z angielskiego na polski, tylko zamieszczaj oryginalne.
Oszczędzisz czas próbujących pomóc.
pozdrawiam

0

Dla potomnych, na nowej wersji Javy też można sprawdzić co się skompiluje na starej:

javac -source 1.4 *.java

pozdrawiam

0

Hey
Dziekuje bardzo za pomoc.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1