Два модуля с одинаковыми именами методов, включенные в один класс

ArrayIndexOutOfBoundsException само имя объясняет, что если вы пытаетесь получить доступ к значению в индексе, который выходит за рамки размера массива, возникает такое исключение.

В вашем случае вы можете просто удалить знак равенства из цикла for.

for(int i = 0; i<name.length; i++)

Лучшим вариантом является итерация массива:

for(String i : name )
      System.out.println(i);
1
задан bright 13 July 2018 в 14:22
поделиться

1 ответ

Нет, все методы модуля существуют в пространстве имен класса. Следовательно, это не похоже на особенно полезный вариант для модулей.

Вы могли бы дать методам имена, специфичные для модуля (client_wizard_step_one_completed?), но я бы рекомендовал вместо этого определять мастеров как отдельные классы , и передачу экземпляра пользователя в качестве параметра.

class User < ApplicationRecord
  def client_wizard
    ClientWizard.new(self)
  end
end

class ClientWizard
  def initialize(user)
    @user = user
  end

  def step_one_completed?
    @user.name.present?
  end
end
4
ответ дан matthewd 17 August 2018 в 12:37
поделиться
  • 1
    Этот взгляд greaaat! Большое спасибо. Несколько вопросов: я предполагаю, что я могу инкапсулировать (пространство имен, если я использую термин неверно), оба класса. Также как я могу поделиться общими методами. Еще раз, спасибо. – bright 13 July 2018 в 14:41
  • 2
    Да, вы можете определить эти классы там, где это удобно. Вы могли бы делиться функциональностью через наследование (возможно, ClientWizard & lt; UserWizard и UserWizard & lt; WizardBase), или затем использовать модуль, который вы включаете в каждый необходимый ему мастер. – matthewd 13 July 2018 в 14:51
Другие вопросы по тегам:

Похожие вопросы: