2016-04-02 3 views
0

Я пытаюсь создать класс Vehicle и конструктор для этого класса. Класс характеризуется объемом двигателя, год изготовления и типом транспортного средства (это может быть только «автомобиль» или «мотоцикл»). Что меня беспокоит в последнем бите, так это то, как я должен его реализовать. Пользователь вводит c (автомобиль) или m (мотоцикл). Мой вопрос - лучший способ реализовать это?Конструктор if statement

Должен ли я сделать оператор if внутри конструктора (например, если переданным параметром типа транспортного средства является 'c', тогда сделайте String 'Car' или 'Motorcycle' для m).

или

ли нечто подобное в public static void main метод, где я хотел бы сделать String Car или String Motorcycle (в зависимости от входа) и просто передать его на конструктору.

+4

Перечислитель? Это звучит как очень типичное применение перечислений. –

+0

Не то, что продвинулось на Java, конечно, конечно, мне нужно решение для новичков. – monolith937

+0

Ну, я думал, что перечисления могут быть простыми. :-) Я вижу, конечно, если вы не узнали перечисления, вы не должны использовать их. В этом случае я думаю, что просто сохранил символ ('c' или 'm') внутри объекта Vehicle. Если вы хотите немного продвинуться вперед, вы можете поместить оператор if в метод getter и/или toString, чтобы вы могли распечатать «Автомобиль» или «Мотоцикл». –

ответ

2

В идеале вы не должны ставить логику внутри конструктора, как конструктор используется для инициализации цели , Таким образом, вы должны поместить условие if внутри основного метода, а затем передать конечные значения конструктору.

+1

Хорошо, так что в принципе, я уже должен передавать предопределенное значение конструктору, никогда внутри одного. Например. 'Vehicle v = new Vehicle (2200, 1976,« ​​car »);' – monolith937

+2

Основная идея здесь заключается в том, что наименьшая логика внутри конструктора помещается как против условностей. Да, вы должны передать предопределенное значение конструктору. – ValarDohaeris

+1

Это только я? Соглашение об исключении логики в конструкторе для меня нова. Иногда у меня есть методы вызова конструктора, содержащие логику. В чем проблема с этим в этом случае? –

0

Общая практика заключается в создании абстрактного класса Vehicle, а затем его расширении классами автомобилей и мотоциклов.

abstract class Vehicle 
{ 
    //Common logic here 
} 
class Car extends Vehicle 
{ 
    //Car-specific stuff here 
} 

class Motorcycle extends Vehicle 
{ 
} 

Вы должны создать соответствующий экземпляр в основном методе сейчас, позже вы можете использовать factory pattern создать класс-определенное поведение

+1

Весь трюк заключается не в создании подклассов. Мне было просто любопытно, каков наилучший способ перехвата «String». Автомобиль и мотоцикл по-прежнему будут одним и тем же объектом, единственное различие в том, что у него будет «String», в котором говорится «Автомобиль», другой «Мотоцикл». – monolith937

+0

Если это так, я бы рекомендовал действительно использовать ENUMS - если вам не нужна какая-либо логика внутри и просто флаг для типа транспортного средства, то перечисление - правильное решение. – Akceptor

+0

О, хорошо, мне еще нужно перечислить. Я новичок, только начинаю, но я считаю, что решение enum пригодится позже. Спасибо :) – monolith937