Добрый день, подскажите пожалуйста, вот есть у меня вот такой код и тут разные типы переменных имеют одно и тоже имя, и потом в коде при ссылках с помощью this ссылаются на эти имена и совершенно не ясно, на что ссылаются в конкретном случае. Как можно разобраться с этим? Вот пример.
public class RR extends MIDlet {
private i a;
private k a;
private c a;
private j a;
private f a;
private g a;
private d a;
private a a;
private e a;
private RecordStore a;
public Thread t_main;
public String a = "2.1.0";
public String b = "rr_data_2_1_0";
public String[] a = new String[50];
public String[][] a;
public String[][] b;
public String[][] e;
public String[][] f;
public String[] b;
public String c = null;
public int[] a = new int[50];
public int[][] a;
public int a;
public int[] b = new int[50];
public int[] c;
public int[][] b;
public int[][] c;
public int[][] d;
public int[] d;
public int[] e;
public int[] f;
public int[] g;
public int b = 50;
public int c = 0;
public int d = 0;
public int e = 7;
public int f = 0;
public int g;
public int h;
public int i;
public boolean a = true;
public boolean b = false;
public boolean c;
public boolean d;
public Image[] a;
public Image[] score_pics;
public Image[] b;
public Image[] c;
а потом создаются объекты классов:
public void startApp() {
this.a = new k(this);
this.a = new j(this);
this.a = new f(this);
this.a = new g(this);
this.a = new c(this);
this.a = new d(this);
this.a = new a(this);
this.a = new e(this);
this.a = new i(this);
и после идут методы из разряда:
public void water_show() {
this.a.a();
this.getDisplay().setCurrent(this.a);
}
Как понять какого именно класса вызывается метод, если разным классам объектов надавали одинаковых имен?
Спасибо!
Юра Басов
11 уровень
Излишнее использование this
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Take_it_easyExpert
7 февраля 2020, 09:12
Переименовать переменные?🙂 На практике лучше всего
1) Давать переменным говорящие имена
2) Естественно не называть одинаково переменные в пределах одной сущности ( например как тут, класса)
+1
Юра Басов
7 февраля 2020, 09:14
Вот я и хочу их переименовать, но дело в том, что код не мой. Это распакованный джарник очень очень старой рыбалки на джава, который я изучаю, чтоб видеть примеры использования кода на практике.
0
Justinian Judge в Mega City One Master
7 февраля 2020, 09:36
у тебя он открыт только для чтения и ты не можешь его даже выделить, только скриншот сделать?
Ты код в посте вручную набирал?
Если нет, то делай копию проекта или по классам копируй и переименовывай как хочешь. И заодно проникнись, почему в джава строгие правила по наименованиях методов/классов/пакетов.
Хотя, с другой стороны, если переименовывать то нужно знать в что..ну есть же причина по которой ты решил откопать этот джарник и разобраться. Если она уважительная, то сможешь дать нормальные имена,сколько бы это не заняло, день или год.
+1
Юра Басов
7 февраля 2020, 09:48
Я их скопировал в отдельные классы свои, подгрузил все библиотеки для импорта и начал заниматься переименованием. Многие переменные можно без проблем переименовать, потому что IDE сразу же говорит, если например из int a, int[] a и String a я выбрал не тот тип (уже в методах). Но когда дело доходит от переменных до объектов, то начинаются непонятки. К примеру: из за того, что в этом классе получены экземпляры классов с одинаковыми именами: this.a = new k(this);
this.a = new j(this);
this.a = new f(this);
this.a = new g(this);
this.a = new c(this);
this.a = new d(this);
this.a = new a(this);
this.a = new e(this);
this.a = new i(this);
то в дальнейшем куске кода не понятно к какому классу относится действие (e, i, a, f итд):
public void water_show() {
this.a.a();
this.getDisplay().setCurrent(this.a);
}
Возможно я не могу адекватно объяснить в чём проблема.. Проще говоря я столкнулся с тем, что переименовав инициализируемые переменные я не могу понять в каких местах кода ссылаются именно на эту переменную, а не на другую, с другим типом, но таким же именем.
0
Take_it_easyExpert
7 февраля 2020, 09:57
попробуй через refactor переименовать (нажимаешь правой кнопкой на название переменной -> refactor -> rename), мож idea разберется, что там к чему у тебя)
так можно переименовать переменную по всему проекту
+1
Юра Басов
7 февраля 2020, 10:00
Пробовал, и к сожалению она без разбора переименовывает все "а" в одно. Может быть Вам известен еще какой нибудь способ?
0
Take_it_easyExpert
7 февраля 2020, 10:09
ну а если через ctrl нажать на метод, idea тебя перекинет на обьявление метода в нужном классе. или правая кнопка -> go to -> Declaration or usages
вообще если Idea даж не понимает всех этих хитросплетений , код такой не компилируется, то тут наши полномочия все(
неясно только, как этот код вообще где то компилировался и работал
+3
Юра Басов
7 февраля 2020, 10:17
Да, код не компилируется, хотя взят из рабочей игрушки, поэтому я не понимаю как такое может быть.
Но Ваш способ через ctrl кажется помогает решить если уж не все, то по крайне мере многие неоднозначности. Не знаю только как он сработает если один и тот же метод будет определен в разных классах.
Спасибо Вам!
0
Take_it_easyExpert
7 февраля 2020, 10:38
🙂👍
0
VladimirMaster
7 февраля 2020, 08:58
this
0
Юра Басов
7 февраля 2020, 09:04
Я прочитал эту статью и всё что там написано понял. Но тут несколько другая ситуация, так как в теле класса создается несколько объектов и переменных разных типов, но с одинаковыми именами (например а).
0