Questa è la classe padre :
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
public abstract class Cliente implements Cloneable,Calcolabile<Integer>,Serializable,Externalizable{
private String nome;
private int id;
private static int contId;
private String numeroTelefonico;
private Indirizzo indirizzo;
public Cliente() {
nome= "";
id = contId++;
numeroTelefonico= "";
setIndirizzo(new Indirizzo("",0));
}
public Cliente(String nome, String numeroTelefonico,
Indirizzo indirizzo) {
//if(this.nome.equalsIgnoreCase(nome)) throw new IllegalArgumentException();
this.nome = nome;
this.id = contId++;
this.numeroTelefonico = numeroTelefonico;
this.setIndirizzo(indirizzo.clone());
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cliente other = (Cliente) obj;
if (id != other.id)
return false;
if (getIndirizzo() == null) {
if (other.getIndirizzo() != null)
return false;
} else if (!getIndirizzo().equals(other.getIndirizzo()))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (numeroTelefonico == null) {
if (other.numeroTelefonico != null)
return false;
} else if (!numeroTelefonico.equals(other.numeroTelefonico))
return false;
return true;
}
@Override
public String toString() {
return "Cliente [nome=" + nome + ", id=" + id + ", numeroTelefonico="
+ numeroTelefonico + ", indirizzo=" + getIndirizzo() + "]";
}
public Cliente clone(){
Cliente app;
try {
app = (Cliente)super.clone();
app.indirizzo =this.indirizzo.clone();
return app;
} catch (CloneNotSupportedException e1)
{
return null;
}
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public static int getContId() {
return contId;
}
public static void setContId(int contId) {
Cliente.contId = contId;
}
public String getNumeroTelefonico() {
return numeroTelefonico;
}
public void setNumeroTelefonico(String numeroTelefonico) {
this.numeroTelefonico = numeroTelefonico;
}
public Indirizzo getIndirizzo() {
return indirizzo;
}
public void setIndirizzo(Indirizzo indirizzo) {
this.indirizzo = indirizzo;
}
@Override
public void readExternal(ObjectInput in) throws ClassNotFoundException, IOException{
this.nome=(String) in.readObject();
this.id = in.readInt();
this.contId= in.readInt();
this.numeroTelefonico= (String) in.readObject();
this.indirizzo = (Indirizzo) in.readObject();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException{
out.writeObject(nome);
out.writeInt(id);
out.writeInt(contId);
out.writeObject(numeroTelefonico);
out.writeObject(indirizzo);
}
}
queste sono le classi figlie:
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
public class ClienteOrdinario extends Cliente implements Cloneable {
private int percentualeDiSconto;
public ClienteOrdinario() {
super();
// TODO Auto-generated constructor stub
}
public ClienteOrdinario(String nome, String numeroTelefonico,
Indirizzo indirizzo,int percentualeDiSconto) {
super(nome, numeroTelefonico, indirizzo);
try{
if(percentualeDiSconto>=0 && percentualeDiSconto<=5)
this.percentualeDiSconto = percentualeDiSconto;
else
throw new PercentualeDiScontoExepetion();
}catch(PercentualeDiScontoExepetion e){
System.out.println("percentuale di scotno negativa");
}
}
@Override
public String toString() {
return super.toString()+getClass().getSimpleName()+" [percentualeDiSconto=" + percentualeDiSconto
+ "]";
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
ClienteOrdinario other = (ClienteOrdinario) obj;
if (percentualeDiSconto != other.percentualeDiSconto)
return false;
return true;
}
public ClienteOrdinario clone()
{
return (ClienteOrdinario) super.clone();
}
@Override
public Integer calcolaPrezzo(Integer importo) {
importo = importo*percentualeDiSconto/100;
return importo;
}
public int getPercentualeDiSconto() {
return percentualeDiSconto;
}
public void setPercentualeDiSconto(int percentualeDiSconto) {
try {
if(percentualeDiSconto>=0&&percentualeDiSconto<=5){
this.percentualeDiSconto = percentualeDiSconto;
throw new PercentualeDiScontoExepetion();
}
}
catch (PercentualeDiScontoExepetion e) {
System.out.println("percentuale errata");
}
}
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
percentualeDiSconto =in.readInt();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(percentualeDiSconto);
}
}
questa è la seconda classe figlia:
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.text.ParseException;
public class ClienteOro extends Cliente implements Cloneable{
private Profilo profilo;
private int percentualeDiSconto;
int bonus;
public ClienteOro() {
profilo = new Profilo(" ");
percentualeDiSconto = 0;
bonus =100;
}
public ClienteOro(String nome, String numeroTelefonico,
Indirizzo indirizzo,Profilo profilo, int percentualeDiSconto) {
super(nome, numeroTelefonico, indirizzo);
this.profilo = profilo;
try {
if(percentualeDiSconto>=10&& percentualeDiSconto<=20)
this.percentualeDiSconto = percentualeDiSconto;
else
throw new PercentualeDiScontoExepetion();
}
catch(PercentualeDiScontoExepetion e)
{
System.out.println("errore");
}
this.bonus =100;
}
public Profilo getProfilo() {
return profilo.clone();
}
public void setProfilo(Profilo profilo) {
this.profilo = profilo.clone();
}
public int getPercentualeDiSconto() {
return percentualeDiSconto;
}
public void setPercentualeDiSconto(int percentualeDiSconto) throws PercentualeDiScontoExepetion {
if(percentualeDiSconto>=10&& percentualeDiSconto<=20)
this.percentualeDiSconto = percentualeDiSconto;
else new PercentualeDiScontoExepetion();
}
public int getBonus() {
return bonus;
}
public void setBonus(int bonus) {
this.bonus = bonus;
}
@Override
public String toString() {
return super.toString()+getClass().getSimpleName()+" [profilo=" + profilo + ", percentualeDiSconto="
+ percentualeDiSconto + ", bonus=" + bonus + "]";
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
ClienteOro other = (ClienteOro) obj;
if (bonus != other.bonus)
return false;
if (percentualeDiSconto != other.percentualeDiSconto)
return false;
if (profilo == null) {
if (other.profilo != null)
return false;
} else if (!profilo.equals(other.profilo))
return false;
return true;
}
public ClienteOro clone()
{
ClienteOro app = new ClienteOro();
app.profilo = this.profilo.clone();
app=(ClienteOro) super.clone();
return app;
}
@Override
public Integer calcolaPrezzo(Integer importo) {
if(importo>=bonus)
{
importo =(importo-bonus)*percentualeDiSconto/100;
bonus=0;
return importo;
}
//else
bonus =bonus-importo;
return 0;
}
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
profilo=(Profilo) in.readObject();
percentualeDiSconto = in.readInt();
bonus = in.readInt();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(profilo);
out.writeInt(percentualeDiSconto);
out.writeInt(bonus);
}
}
e questo è il mio main
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class testerMain {
public static void main(String[] args) {
ArrayList<Cliente> listaCliente = new ArrayList<Cliente>();
ClienteOrdinario clienteOrd1,clienteOrd2,clienteOrd3,clienteOrd4,clienteOrd5;
ClienteOro clienteOro1,clienteOro2,clienteOro3,clienteOro4,clienteOro5;
clienteOrd1 = new ClienteOrdinario("marco", "081", new Indirizzo("ciao", 0), 3);
clienteOrd2 = new ClienteOrdinario("marco", "081", new Indirizzo("ciao", 0), 3);
clienteOrd3 = new ClienteOrdinario("marco", "081", new Indirizzo("ciao", 0), 3);
clienteOrd4 = new ClienteOrdinario("marco", "081", new Indirizzo("ciao", 0), 3);
clienteOrd5 = new ClienteOrdinario("marco", "081", new Indirizzo("ciao", 0), 3);
clienteOro1 = new ClienteOro("giovanni","065", new Indirizzo("bis",3),new Profilo("bohh"),12);
clienteOro2 = new ClienteOro("giovanni","065", new Indirizzo("bis",3),new Profilo("bohh"),12);
clienteOro3 = new ClienteOro("giovanni","065", new Indirizzo("bis",3),new Profilo("bohh"),12);
clienteOro4 = new ClienteOro("giovanni","065", new Indirizzo("bis",3),new Profilo("bohh"),12);
clienteOro5 = new ClienteOro("giovanni","065", new Indirizzo("bis",3),new Profilo("bohh"),12);
try {
ObjectInputStream fileInputStream = new ObjectInputStream(new FileInputStream(new File("prova.dat")));
listaCliente=(ArrayList<Cliente>) fileInputStream.readObject();
clienteOrd1=(ClienteOrdinario) listaCliente.get(0);
clienteOrd2=(ClienteOrdinario) listaCliente.get(1);
clienteOrd3=(ClienteOrdinario) listaCliente.get(2);
clienteOrd4=(ClienteOrdinario) listaCliente.get(3);
clienteOrd5=(ClienteOrdinario) listaCliente.get(4);
clienteOro1=(ClienteOro) listaCliente.get(5);
clienteOro2=(ClienteOro) listaCliente.get(6);
clienteOro3=(ClienteOro) listaCliente.get(7);
clienteOro4=(ClienteOro) listaCliente.get(8);
clienteOro4=(ClienteOro) listaCliente.get(9);
fileInputStream.close();
} catch (FileNotFoundException e) {
listaCliente.add(clienteOrd1);
listaCliente.add(clienteOrd2);
listaCliente.add(clienteOrd3);
listaCliente.add(clienteOrd4);
listaCliente.add(clienteOrd5);
listaCliente.add(clienteOro1);
listaCliente.add(clienteOro2);
listaCliente.add(clienteOro4);
listaCliente.add(clienteOro3);
listaCliente.add(clienteOro5);
ObjectOutputStream file;
try {
file = new ObjectOutputStream(new FileOutputStream(new File("prova.dat")));
file.writeObject(listaCliente);
file.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
l'esercizio chiedeva vedere se il file prova è presente nel file system nel caso il file non esiste creare 10 istanze di oggetti figli(5 clienti oro e 5 clienti ordinari) ma non ci riesco in nessun modo