Java: әдісті шақырудан екі сантиметрді қайтарады

Мен осы кодты 2 өлшемді координаттармен жұмыс істейтін көп нәрсені жасаймын:

int[] getSize() {
    int[] res = {gridRows, gridColumns};
    return res;
}

Мен кішігірім сыныпты анықтауға және қауіпсіздік техникасын алуға болатынын білемін, бірақ менде бұл менің тривиальды .java файлында менің кодты біріктіруге тура келетін осындай тривиалдық сыныпқа ие болуыма кедергі келтірмейтіндігім жоқ.

Сіз қалай ойлайсыз, бұл жаман, нашар немесе жамандық? Немесе сіз де жасайсыз ба?

3

6 жауаптар

Егер сіздің жобаңызда инкапсуляциялауды қажет ететін тұжырымдама бар болса, мысалы, осы екі интенсивті координаты болса, онда олар үшін класс болуы дұрыс емес. Менің ойымша, бұл көп нәрсе тазартқыш, содан кейін барлық массив жасау үшін мәжбүр және т.б.

Мысалы, біреу сол жобада дамиды және әдісіңізді шақырады, сіз олар үшін екі ұстаныммен немесе Coordinates деп аталатын объекті бар инт массасын алу үшін анық деп ойлайсыз ба?

Сонымен қатар, егер сіз сыныпты пайдалансаңыз, дұрыс OO сәнінде инкапсулалануы мүмкін координаттарды салыстыру сияқты заттарды іске асырғыңыз келуі мүмкін. ( Объект келісімшартына »құрмет көрсетуді ұмытпаңыз егер сіз бірдей нәрсені теңдестірсеңіз).

12
қосылды

Бұл жағдайда сіз Point пайдалана аласыз.

Жалпы алғанда, эстетикалық жағынан, жиі-жиі, осындай логикалық әдістердің орнына, оларды ұстауға арналған класс жасауға мағынасы бар, көмекші әдістер жеткілікті. Кейде тіпті отладка және тіркеуге арналған toString() функциясына ие болу жеткілікті.

Өте жоғары өнімділік алаңдаушылық тудыратын жерде, жоғары сапалы тривиальды көмекші әдістерді түпкілікті етіп жасай аласыз, сондықтан оларды енгізуге болады.

Потенциалды мүшелері жалпыға ортақ бір нәрсе бар болса, олардың функциямен оралғандығынан, егер олар жалпыға ортақ болған болашақты көре алатын болсаңыз, міндетті түрде сынып жасаңыз.

Кейбір жағдайларда, қайтаруды қайтаруды және үлкен мәнді контекст нысанында әдісті қайтару мәндерін орнатуға болатын қандай да бір түрге көшуді қарастырыңыз. Бұл өте сақтықпен қолданылуы керек - ол муфталардың қозғалысын жеңілдетуі мүмкін.

3
қосылды

оны кірістірілген статикалық сынып ретінде анықтауға болады

(мысалы, 2D координаттарындағы операцияларды 1 нүктеде анықтаңыз, оларды жиынтыққа қойыңыз (теңдей жұмыс істемейді, мысалы, массивтерде)

2
қосылды

Сіз әдісті қайтару мәндерін ұстап тұру үшін ішкі сыныпты жасай аласыз. Бұл жаңа .java файлын қажет етпейтін артықшылығы бар:

public class Parent{
  public Size getSize() {
    return new Size(gridRows, gridColumns);
  }

  public static class Size{
    //...
  }
}

Parent parent = new Parent();
Parent.Size size = parent.getSize();

Классты «статикалық» деп анықтау, негізінен, қалыпты класс сияқты өңделуі мүмкін екенін білдіреді ( Size орнына Parent.Size пайдалану керек). Егер сынып «статикалық» емес болса, онда сыртқы сыныптың данасынсыз жаңа данасын жасай алмайсыз.

1
қосылды

Өкінішке орай, java-да бұл көптеген мәндерді қайтарудың ең жақсы тәсілі. Мен әдетте массивтерді немесе тізімдерді қолданады. Мен міндетті түрде «жаман нысан» деп ойламаймын, оған өзі үшін сабақ жасау керек, бірақ бұл қажет емес.

0
қосылды

Java бірнеше әдістерді әдістерден қайтара алмайтынын ескере отырып, істеп жатқан нәрсе сол түрдегі бірнеше мәндерін қайтарудың жалғыз жолы туралы. Егер мәндер әртүрлі болса, қайтару мәндерін инкапсуляциялау үшін кіші сыныпты (сұрыптаудың мәндік нысаны) жазуыңыз керек.

Тағы бір, тіпті ең нашар нұсқалар, массивтерді параметрлер ретінде өткізіп, кері мәндерді қалдырады - Java-дегі өту сілтемесін модельдеу үшін бұзу. Өте ұнады.

0
қосылды