powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
6 сообщений из 6, страница 1 из 1
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
    #39101321
vladimir-boy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
//Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект!
interface HowDefineMyType
{

	void info();
}

class A implements HowDefineMyType
{

	public int x;

	public A(int x)
	{
		this.x = x;
	}

	public void info()
	{
		System.out.println("x = " + x);
	}
}
///////////////////////////////////////////......................................////////////////////////////////
//////100500 строк запутанного кода, в котором нет времени нет разбираться///
///////////////////////////////////////////......................................////////////////////////////////	

class B extends A
{

	public int y;

	public B(int x, int y)
	{
		super(x);
		this.y = y;
	}

	public void info()
	{
		System.out.println("x = " + super.x + "                 y = " + y);
	}

}

public class TypeOff
{

	public static void main(String args[])
	{
		HowDefineMyType howDefinedMyType;
		B myObjB = new B(3, 7);
		howDefinedMyType = myObjB;
		///////////////////////////////////////////......................................////////////////////////////////
		////////////////////////////100500 строк запутанного кода////////////////////////////////////
		///////////////////////////////////////////......................................////////////////////////////////	
		// дошёл до переменной howDefinedMyType и её изучаю
		System.out.println("Переменная howDefinedMyType ссылается на: " + howDefinedMyType.getClass()); //(.. на: class B)
		//Допустим нашёл я этот класс B и хочу использовать его функционал - да не тут то было!?
		howDefinedMyType.info(); // (x = 3                 y = 7)      // тут всё распечатало красиво и чётко
		//howDefinedMyType.y = 23; // ОШИБКА, так как переменная howDefinedMyType только ССЫЛАЕТСЯ на класс B, а её 
		//истинный ТИП - ИНТЕРФЕЙС HowDefineMyType!!!

		// ВОПРОС: Как узнать ТИП переменной howDefinedMyType;
	}
}



хочу что-то увидеть типа:
System.out.println(" Тип howDefinedMyType будет: " + howDefinedMyType.getType()); //.. будет: interface HowDefinedMyType

Заранее спасибо за конструктивный ответ.
...
Рейтинг: 0 / 0
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
    #39101341
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vladimir-boy,

1) добавить геттеры

2)

Код: java
1.
2.
3.
if (howDefinedMyType instanceof B) {
	int yValue = ((B) howDefinedMyType).getY();
}
...
Рейтинг: 0 / 0
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
    #39101529
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladimir-boy
Код: java
1.
2.
3.
//Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект!
...
//Допустим нашёл я этот класс B и хочу использовать его функционал - да не тут то было!?



хочу что-то увидеть типа:
System.out.println(" Тип howDefinedMyType будет: " + howDefinedMyType.getType()); //.. будет: interface HowDefinedMyType


Тип переменной у вас известен в Compile-time, его ненадо определять и невозможно переопределить.
Вы хотите не тип переменной, а тип обьекта, на который переменная ссылается.
Тут могут быть варианты
1) как посоветовали выше - проверка instanceof и если да, то приведение к этому типу.
if (x instanceof K){ K k = (K)x;....используем k вместо х....}

этот подход является нерекомендуемым
2) использовать виртуальные вызовы.
авторinterface IContainsY{ void setY(int v); }

class Foo implements IContainsX{
void setY(int v){поведение 1}
}

class Foo2 implements IContainsX{
void setY(int v){поведение 2}
}

IContainsX howDefinedMyType;
....
howDefinedMyType.setY(23)




3) Использовать рефлекшен или использовать groovy, у которого рефлекшен под капотом.
В случае груви просто пишите howDefinedMyType.y = 23 и если там будет y, то оно его засетит. Через рефлекшен надо вытащить класс, из класса вытащить Field с этим именем, и потом сделать filed.setInt(howDefinedMyType, 23);

этот метод считается более медленным но унифицированным в том плане, что вообще можно не париться за тип.
...
Рейтинг: 0 / 0
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
    #39101809
vladimir-boy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем для себя нашёл такое решение:
я хитро изловчился в NetBeans и вычислил тип: набираю первые три буквы искомой переменной
how(DefinedMyType) нажимаю Ctrl + Пробел и у меня в окошке подстановки вылетает howDefinedMyType HowDefinedMyType с иконкой интерфейса("бесконечность")
...
Рейтинг: 0 / 0
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
    #39101820
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
удаляй...
...
Рейтинг: 0 / 0
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
    #39101859
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фейспалм какой-то... я думал тут про рефлексию тема.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]