2011-04-21 29 views
7

Başka bir nokta (x, y) alan ve değerlerini kopyalayan bir kopya oluşturucu nasıl oluştururum? DenedimJava'da bir kopya oluşturucu oluşturma

public class Point1 

{ 
    private int _x , _y;  
    public Point1 (Point1 other) 
    { 
     ... 
     ... 
    } 
//other more constructors here... 

} 

: gibi Noktası sınıfı görünüyor

... public Point1 (Point1 other), ama bunun içinde ne yazacağımı bilmiyorum:

Bir imza karar

public Point1 (Point1 other) 
{ 
    _x = other._x ; 
    _y = other._y; 
} 

Ama daha iyi yapabileceğime neredeyse eminim ..

thnx

+0

@Master C, örneklerinde 'public Point1 (Point1 other) 'anlamına geleceğini mi düşünüyorsunuz? –

+2

A “Point”, çoğu zaman değişmez olması gereken bir şeyin örneğidir, bu durumda aslında bir kopyalama gerekli değildir. – ColinD

+1

Neden başka bir şekilde olması gerektiğini düşünüyorsunuz? Tüm bir kopya kurucusunun yapması gereken diğer nesnenin alanlarının değerlerini kopyalamaktır. – uckelman

cevap

16

Hayır,

public Point1(Point1 other) 
{ 
    _x = other._x ; 
    _y = other._y; 
} 

sizin girişimi (I parametre türü düzelttim.) ... kesinlikle iyi

Ben _x ve _y nihai hale getirmek için cazip olacaktır, ve dersin finalini yapalım, ama değişmez tiplerden hoşlanıyorum. Diğerleri kesinlikle farklı fikirlere sahiptirler.

Bir devralma hiyerarşisinde klonlama biraz daha zorlayıcıdır - hiyerarşideki her sınıf ilgili bir kurucuya sahip olmak zorundadır, üst sınıf yapıcısına verilen herhangi bir argümanı iletir ve sonra yalnızca kendi alanlarını kopyalar. uygulama tarafında çok kötü değil, ama sadakatle size gereken bir Point2 bilmek klonlamak istiyorsanız doğru kurucusunu çağırmak için bir Point2 var

public class Point2 extends Point1  
{ 
    private int _z; 
    public Point2(Point2 other) 
    { 
     super(other); 
     this._z = other._z; 
    } 
} 

: Örneğin.

Cloneable Uygulaması bunun biraz daha basit yapılmasına izin verir, ancak bunun etrafında düşünülecek başka şeyler de vardır ... temel olarak klonlama nesneleri göründüğü kadar basit değildir :) (Eminim bir giriş var Bunun için etkili Java içinde. Eğer bir kopyanız yoksa, şimdi bir tane satın alın.)

+0

Anlaşmalı. Başka ne yapabilirsin? –

+0

Harika bir cevap, ve eminim java, kopya yapıcıları klonlama yerine önermektedir. Ayrıca, değişken isimlerinde gereksiz "_" karakterlerinden kurtulmayı öneriyorum, ama bu, ve benzer bir adamdır –

+0

@Java: Evet, ben de kendimden hoşlanmıyorum, ama yapamayacağımı düşündüm OP'nin stilini değiştirmeyi deneyin * çok * çok :) –

İlgili konular