Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 426
#1

Проверить возможность приведения типа - Программирование Android

29.01.2016, 21:30. Просмотров 520. Ответов 20
Метки нет (Все метки)

Как проверить, можно ли привести к типу?
Например:
Java
1
ViewGroup vg = (ViewGroup) findViewById(R.id.MyView);
Может привести к ошибке из-за невозможности приведения.
Можно ли заранее это узнать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2016, 21:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверить возможность приведения типа (Программирование Android):

Приведения типа классов - C++
#include <iostream> class Number2; class Number { public: int i; Number(int ii = 0) : i(ii) {} Number(const...

Объяснение Приведения типа - C#
Доброго времени суток. Помогите объяснить зачем в данном случае используется Приведение типа: public partial class Form1 : Form ...

Заменить ли комбинацию запроса и приведения типа - C#
Вообщем получаю коллекцию(IEnumerable) типов DriveInfo,только тех которые работают и съемные. Вообщем упростил,как мне кажется,ужасно. ...

Динамическое определение типа для приведения - Java SE
Добрый день! На финальной стадии написания курсового проекта возник вопрос. Я не слишком сильна в рефлексии, но использую небольшой её...

Прототип оператора приведения из другого типа - C++
Каков прототип оператора приведения из другого типа? Или это надо конструктором?

Проверить правильность приведения к предваренной нормальной форме - Логика и множества
Собственно задание звучит так: Привести формулу к предваренной нормальной форме.Посмотрите пожалуйста правильность моих...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
29.01.2016, 22:08 #2
Оператор instanceof
1
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
30.01.2016, 12:16 #3
имхо
если в своей же программе возникает необходимость заюзать instanceof - значит что-то в архитектуре программы что-то пошло не так
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
30.01.2016, 12:26 #4
Цитата Сообщение от Паблито Посмотреть сообщение
если в своей же программе возникает необходимость заюзать instanceof - значит что-то в архитектуре программы что-то пошло не так
А может, там динамическое создание компонентов. Очень даже полезный оператор.
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
30.01.2016, 12:31 #5
Я когда на оверфлоу случайно вижу в коде instanceof, сразу автоматически смотрю на автора сообщения, как правило это индусы.
И вообще я написал что это имхо.

Что такое динамическое создание? Он не знает какого типа этот объект в xml файле?

"Anytime you find yourself writing code of the form "if the object is of type T1, then do something, but if it's of type T2, then do something else," slap yourself.
(c) не мой
0
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 426
30.01.2016, 13:12  [ТС] #6
Цитата Сообщение от Паблито Посмотреть сообщение
имхо
если в своей же программе возникает необходимость заюзать instanceof - значит что-то в архитектуре программы что-то пошло не так
Объясню. Требуется менять setEnabled() всех элементов контейнерного компонента.
Т.е. всё содержимое LinearLayout. Но в одном LinearLayout могут быть другие контейнеры типа LinearLayout, RadioGroup и пр.
Решил рекурсивно обходить содержимое, перед этим проверяя возможность приведения к типу ViewGroup для того, чтобы не нарваться на ошибку при попытке чтения getChildCount().
Может есть более простой способ поменять доступность группы элементов?
Я не нашел.
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
30.01.2016, 13:13 #7
Паблито, Вы не правы. instanceof часто нужен, даже необходим. Вот Вам пример.
В поток consumer поступают сообщения на обработку. При остановке приложения надо остановить этот поток. Правильным решением будет сделать общий интерфейс для сообщения и для сигнала для завершения потока.

Java
1
2
3
4
5
6
7
8
while (true) {
   ISignal consumerMessage = sharedQueue.take();
   if (consumerMessage instanceof Message) {
      //
  } else if (consumerMessage instanceof ShutdownSignal) {
     break;
  }
}
Добавлено через 21 секунду
Slon747, instanceof
1
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
30.01.2016, 15:20 #8
Цитата Сообщение от Паблито Посмотреть сообщение
И вообще я написал что это имхо.
Вот вам и привели примеры. Всё, что пишете, не может быть объективным, а только лишь субъективным, поэтому "имхо" можно даже не добавлять.
Кстати, некоторые индусы вполне даже дело пишут, блоги ведут, в общем, сильные специалисты.
Не так давно на одной работе junior, который считает себя middle, рассказал мне, что instanceof - самая медленная и ненужная операция. Что даже просто сравнение классов как строк работает быстрее, а потому от instanceof надо везде избавляться. Я, на всякий случай, поискал на SO сравнения по скорости с 4 другими реализациями. Оказалось, что instanceof выигрывает почти во всех случаях. Так что зря её недооценивают.
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
30.01.2016, 16:24 #9
CoolMind, всё верно. instanceof отличная вещь. Но опять же, если её применять для контроля при неправильном наследовании, когда у вас "рыба" наследуется от "птицы", то это плохой вариант. Но тут дело не instanceof, а в плохой архитектуре
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
30.01.2016, 17:22 #10
Цитата Сообщение от Паблито Посмотреть сообщение
если в своей же программе возникает необходимость заюзать instanceof - значит что-то в архитектуре программы что-то пошло не так
Цитата Сообщение от YuraAAA Посмотреть сообщение
Но тут дело не instanceof, а в плохой архитектуре

Цитата Сообщение от YuraAAA Посмотреть сообщение
В поток consumer поступают сообщения на обработку. При остановке приложения надо остановить этот поток. Правильным решением будет сделать общий интерфейс для сообщения и для сигнала для завершения потока.
почему не сделать перечислением тип сообщения?
определить в том же интерфейсе

Цитата Сообщение от Slon747 Посмотреть сообщение
Объясню. Требуется менять setEnabled() всех элементов контейнерного компонента.
это можно сделать кучей способов, хоть через слушатели
каждый компонент может менять свое состояние в зависимости от какого-то события (например изменилось значение поля)

поднимите руку кто согласен с тем что задача, которую описал ТС наилучшим образом решается с применением insnaceof ?

Цитата Сообщение от CoolMind Посмотреть сообщение
Не так давно на одной работе junior, который считает себя middle, рассказал мне, что instanceof - самая медленная и ненужная операция. Что даже просто сравнение классов как строк работает быстрее, а потому от instanceof надо везде избавляться.
абсолютно согласен
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
30.01.2016, 17:26 #11
Цитата Сообщение от Паблито Посмотреть сообщение
почему не сделать перечислением тип сообщения?
определить в том же интерфейсе
поясните. Вот пример,

Java
1
2
3
4
5
6
7
while (true) {
* *ISignal consumerMessage = sharedQueue.take();
* *if (consumerMessage instanceof Message) {
* * * DaoAccessor.save((Message) consumerMessage);
* } else if (consumerMessage instanceof ShutdownSignal) {
* * *break;
* }
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
30.01.2016, 17:31 #12
Java
1
2
3
4
5
6
7
8
9
10
11
12
switch(consumerMessage.getType()) {
   case ISignal.Message:
   //
   break;
   case ISignal.ShutdownSignal:
   //
   break;
}
 
interface ISignal {
 enum {Message, ShutdownSignal}
}
писал не в ide, но надеюсь мысль понятна
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
30.01.2016, 18:03 #13
Цитата Сообщение от Паблито Посмотреть сообщение
поднимите руку кто согласен с тем что задача, которую описал ТС наилучшим образом решается с применением insnaceof ?
Без разницы, лучшим или не лучшим, но решается и решается хорошо. Я так же решал.
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
30.01.2016, 18:54 #14
Цитата Сообщение от CoolMind Посмотреть сообщение
Без разницы, лучшим или не лучшим, но решается и решается хорошо. Я так же решал.
Цитата Сообщение от CoolMind Посмотреть сообщение
Всё, что пишете, не может быть объективным, а только лишь субъективным
Я уже много раз на этом форуме выступал за какую-то идею или подход. Потом проходило время и мое мнение иногда менялось. И мне не стыдно, я так учусь.

Добавлено через 44 минуты

Не по теме:

и я не говорил что instanceof медленнее, речь шла об архитектуре (косвенно это же подтвердил YuraAAA)

очень давно я читал какую-то тему в разделе джавы, где обсуждали instanceof и проверял скорость для себя, разницы не заметил и забил

0
Dantes2104
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 61
30.01.2016, 19:11 #15
Можно сделать проверку так
Java
1
2
3
4
5
6
7
8
ViewGroup vg = null;
try{
vg = (ViewGroup) findViewById(R.id.MyView);
//Действие если тип приводимый
}
catch{
//Действие если привести тип не удалось.
}
Добавлено через 12 минут
Ой. Последние строчки так выглядят.
Java
1
2
3
 catch (Exception e){
//Действие если привести тип не удалось.
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2016, 19:11
Привет! Вот еще темы с ответами:

Не вызывается метод из базового типа после приведения типов? - C#
При приведении типов от производного класса Manager к базовому классу Employee, у объекта "e" к которому был приведен Manager, вызывается...

Обертка над ждущими таймерами: ошибка приведения типа - C++ WinAPI
задумал написать оберточку над ждущими таймерами, вот что вышло пока что: Timer.h #pragma once class Timer { public: ...

.NET 4.x Ошибка приведения типа при дешифровке List<string> - C#
Хелпуйте кто может =) private void Serialize() { string t1 = String.Empty; string t2 =...

Неправильное приведения типа при возврате элемента из стандартного стека - C++
Пишет ошибку &quot;invalid type convertion&quot; в строчке #9 Cur=(Node*)s.pop(); вот и собственно весь вопрос, пробовал static_cast не помогло :/ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.01.2016, 19:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru