eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Java: откомпилировать после декомпилятора
Посл.ответ Сообщение

Ранг: 17.7 (новичок)
Статус: Участник

Создано: 28 июля 2013 13:17 · Поправил: Artem_N New!
Цитата · Личное сообщение · #1

В Яве не силён, прошу помощи.

Объявление:
Code:
  1. public abstract interface CallToEngineWithDataRequirementNew {
  2.     public abstract void doIt( RequestContext paramRequestContext ) throws DataRequiredException;
  3.     public abstract void doIt( RequestContext paramRequestContext, DataRequirement paramDataRequirement ) throws DataRequiredException;
  4. }


Использование:
Code:
  1. CallToEngineWithDataRequirementNew l_action = new CallToEngineWithDataRequirementNew() {
  2.     public String i_numeroPR;
  3.  
  4.     public void doIt( RequestContext p_requestContext ) throws DataRequiredException {
  5.         this.i_numeroPR = PRApplet.this.expertPR.getNumeroPR( p_requestContext );
  6.     }
  7.  
  8.     public void doIt( RequestContext p_requestContext, DataRequirement p_dataRequirement ) throws DataRequiredException {
  9.         GlobalesMPF.getDialogysEngine().setDataRequirement( p_dataRequirement, p_requestContext );
  10.         this.i_numeroPR = PRApplet.this.expertPR.getNumeroPR( p_requestContext );
  11.     }
  12. };
  13. DataRequirementMPFUtil.appelAvecTraitementDataRequirement( l_action, this );
  14. this._NumeroPR = l_action.i_numeroPR;


При компеляции ругается на последнюю строчку следующим образом:
java: cannot find symbol
symbol: variable i_numeroPR
location: variable l_action of type CallToEngineWithDataRequirementNew

Как заставить подобное откомпилироваться? Абстрактный классинтерфейс используется подобным образом во многих местах с разными public-переменными. Добавление в него геттера по этой причине невозможно.


Ранг: 748.2 (! !)
Статус: Участник
bytecode!

Создано: 28 июля 2013 14:07 New!
Цитата · Личное сообщение · #2

Вы уверены, что для вашей задачи необходимо перекомпилировать код?
Ведь есть менее разрушительные способы что-нибудь изменить, например поправить байткод можно.

Ранг: 17.7 (новичок)
Статус: Участник

Создано: 28 июля 2013 14:25 New!
Цитата · Личное сообщение · #3

4kusNick, да, уверен Нужно проследить логику работы. В начале добавлял логгирование, но устал и этого оказалось недостаточно.

Ранг: 508.6 (!)
Статус: Модератор

Создано: 28 июля 2013 21:07 New!
Цитата · Личное сообщение · #4

CallToEngineWithDataRequirementNew = абстрактный интерфейс ( = создавать екземпляров нельзя)

как тогда ваш компилятор пропустил такой код?

CallToEngineWithDataRequirementNew l_action = new CallToEngineWithDataRequirementNew() ......

Ранг: 17.7 (новичок)
Статус: Участник

Создано: 28 июля 2013 22:31 New!
Цитата · Личное сообщение · #5

sendersu, не вижу проблемы
Интерфейс абстрактный, но в {...} как раз реализация. Код вполне понятен и валиден.

Ранг: 508.6 (!)
Статус: Модератор

Создано: 28 июля 2013 23:49 · Поправил: sendersu New!
Цитата · Личное сообщение · #6

Artem_N
верно, проглазил )
анонимный класс, реализирующий абстрактный интерфейс... бывает.....

ну тогда я б добавил метод в интерфейс

public String toString()
{
return i_numeroPR;
}

и звал его извне
а напрямую да, ява не увидит (l_action.i_numeroPR;)

| Сообщение посчитали полезным: Artem_N


Ранг: 17.7 (новичок)
Статус: Участник

Создано: 29 июля 2013 13:59 · Поправил: Artem_N New!
Цитата · Личное сообщение · #7

Во, спасибо toString() в данном случае выглядит по месту

Правда, в других местах всё ж пришлось поизвращаться с public и final для inner-класса. Проблему через костыли победил, тему можно закрывать.
 eXeL@B —› Вопросы новичков —› Java: откомпилировать после декомпилятора
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS