2014-01-07 3 views
0

Рассмотрим следующий код:Какова цель этого(); в этом контексте

public Fingerprint(HashMap<String, Integer> measurements) { 
     this(); 
     mMeasurements = measurements; 
    } 

    public Fingerprint(HashMap<String, Integer> measurements, String map) { 
     this(measurements); 
     mMap = map; 
    } 

    public Fingerprint(int id, String map, PointF location) { 
     this(); 
     mLocation = location; 
    } 

    public Fingerprint(int id, String map, PointF location, HashMap<String, Integer> measurements) { 
     this(id, map, location); 
     mMeasurements = measurements; 
    } 

что цель этого(); в данном контексте? Поскольку у меня есть идея, что «это» относится к полям текущего объекта. это одно и то же определение здесь?

+0

'this()' вызов конструктора noarg 'Fingerprint()'. См. Вопрос http://stackoverflow.com/questions/285177/how-do-i-call-one-constructor-from-another-in-java – Matyas

+0

«Это» не относится к полям текущего объекта , но сам текущий объект. В ctor он вызывает параметр-less ctor. –

+0

Должен быть конструктор no-arg, иначе код не будет компилироваться ... – assylias

ответ

5

Вызов this();, как если бы это был метод, это способ вызвать другой конструктор изнутри конструктора. Вы эффективно звоните Fingerprint().

См. Раздел Java Tutorial on the subject, раздел «Использование этого с конструктором».

+0

поэтому Если я звоню в Fingerprint, я не называю другой конструктор правильно? это тот же самый конструктор? – user3170491

+0

Нет, это не-arg ctor, как указано. –

+0

У вас есть код в 'Fingerprint()', который вы также хотите вызвать в параметрах Fingerprint (измерения HashMap ) '. Вы можете вызвать другой конструктор таким образом, из текущего конструктора. Это также позволяет избежать дублирования кода в конструкторах. – rgettman

Смежные вопросы