Передача значений в метод внутреннего класса? - PullRequest
1 голос
/ 17 июля 2011
Promise<List<WrapSpec>> wrapSpecPromise = new Job() {
                @Override
                public List<WrapSpec> doJobWithResult() throws Exception {
                    return PkgLoad.findDistinctWrapSpecBetweenDates(pkgLine, startDate, endDate);               
                }
            }.now();

Можно ли передать значения pkgLine, startDate, endDate в этот метод?Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: Это то, что не рекомендуется?Или нет.Спасибо.

    for ( final PkgLine pkgLine : pkgLineList ) {


            Promise<List<WrapSpec>> distinctWrapPromise = new Job() {

                @Override
                public List<WrapSpec> doJobWithResult() throws Exception {
                    return PkgLoad.findDistinctWrapSpecBetweenDates( pkgLine, startDate, endDate );
                }
            }.now();
            promiseList.add( distinctWrapPromise );
        }

Ответы [ 2 ]

5 голосов
/ 17 июля 2011

Да, если они объявлены final в вызывающем блоке

final PkgLine pkgLine = ...;
final Date startDate = ...;
final Date endDate = ...;

Promise<List<WrapSpec>> wrapSpecPromise =
  new Job() {
    @Override
    public List<WrapSpec> doJobWithResult() throws Exception {
      return
        PkgLoad.findDistinctWrapSpecBetweenDates(
          pkgLine,
          startDate,
          endDate
        );               
    }
  }.now();
2 голосов
/ 17 июля 2011

В метод doJobWithResult, нет, если вы не хотите изменить интерфейс / класс Job.Тем не менее, они могут быть переменными, определенными либо во вложенном методе, либо в классе и использоваться таким образом.Если локальные переменные, они должны быть окончательными для использования в анонимном внутреннем классе, как показано в ответе Александра.

...