Newsgroup: it.comp.java
Titolo: problema clone

Ciao a tutti....
Compilato il seguente codice:
public class ProvADT extends Object implements Cloneable{
	private String nbr="2";
	private Integer a;
	private int b;
	public ProvADT(){a=new Integer(1); b=Integer.parseInt(nbr);}
	public String toString(){
               return "ProvADT: a:=" + a + "; b:=" + b + ";"; 
        }
}
Nessun errore compiletime... (nn ho implementato i metodi
dell'interfaccia Cloneable ma dalle Api (il miele):
A class implements the Cloneable interface to indicate to the
Object.clone() method that it is legal for that method to make a
field-for-field copy of instances of that class.
Okiz fin qui tutto a posto... 
Compilato il seguente codice:
public class UsaProvADT{
	public static void main(String[] args){
		ProvADT adt=new ProvADT();
		ProvADT adtclone;
		adtclone=(ProvADT)adt.clone();
		System.out.println("adtclone:=" + adtclone);
	}
}
Causa del seguente errore compile time:
UsaProvADT.java:5: clone() has protected access in java.lang.Object
                adtclone=(ProvADT)adt.clone();
                                     ^
1 error
mmm... se il metodo clone è dichiarato protected nella classe Object nn
capisco dove sia il problema dato che ogni istanza ha come sopraclasse
Object e quindi ne eredita i metodi(che potrebbero anche essere
sovrascritti ma in caso contrario sarebbero disponibili cmq alle
sottoclassi)... al che ho dato un occhiata alle Api del metodo clone
classe Object, riporto:
protected native Object clone() throws CloneNotSupportedException
Creates a new object of the same class as this object. It then
initializes each of the new object's fields by assigning it the same
value as the corresponding field in this object. No constructor is
called.
The clone method of class Object will only clone an object whose class
indicates that it is willing for its instances to be cloned. A class
indicates that its instances can be cloned by declaring that it
implements the Cloneable interface.
Un ultima domanda:che significa native?
Grazie a tutti e scusate il papiro...
Cia0
LucA
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Un ultima domanda:che significa native?
Non implementato in Java, ma in un altro linguaggio nativo alla 
piattaforma, e reso disponibile tramite un meccanismo di dynamic linking.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 piattaforma, e reso disponibile tramite un meccanismo di dynamic linking.
-- 


 e ogni classe è sottotipo di Object...
http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#62587


Finalmente risolto...
Riporto in caso a qlc1 altro interessasse...
Modificato il codice di ProvADT in questo modo:
public class ProvADT extends Object implements Cloneable{
	private String nbr="2";
	private Integer a;
	private int b;
	public ProvADT(){a=new Integer(1); b=Integer.parseInt(nbr);}
	public String toString(){return "ProvADT: a:=" + a + "; b:=" + b +
";";}
	public Object clone() throws CloneNotSupportedException{
               return super.clone();
        }
}
Riporto inoltre il codice utente:
public class UsaProvADT{
	public static void main(String[] args){
		ProvADT adt=new ProvADT();
		ProvADT adtclone;
		try{adtclone=(ProvADT)adt.clone();}
		catch (Exception e){System.out.println("UsaProvaADT.main:" + e);
return;}
		System.out.println("adtclone:=" + adtclone);
	}
}
Meglio tardi che mai...
Grazie ancora per le spiegazioni:))) 
Ciao 
LucA
