Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип ! / 6 сообщений из 6, страница 1 из 1
12.11.2015, 03:01
    #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
12.11.2015, 06:48
    #39101341
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
vladimir-boy,

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

2)

Код: java
1.
2.
3.
if (howDefinedMyType instanceof B) {
	int yValue = ((B) howDefinedMyType).getY();
}
...
Рейтинг: 0 / 0
12.11.2015, 11:10
    #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
12.11.2015, 13:53
    #39101809
vladimir-boy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
В общем для себя нашёл такое решение:
я хитро изловчился в NetBeans и вычислил тип: набираю первые три буквы искомой переменной
how(DefinedMyType) нажимаю Ctrl + Пробел и у меня в окошке подстановки вылетает howDefinedMyType HowDefinedMyType с иконкой интерфейса("бесконечность")
...
Рейтинг: 0 / 0
12.11.2015, 14:00
    #39101820
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
удаляй...
...
Рейтинг: 0 / 0
12.11.2015, 14:34
    #39101859
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип !
Фейспалм какой-то... я думал тут про рефлексию тема.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип ! / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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