Как проверить тип объекта java
Как узнать тип объекта разными способами в Java?
Нашел тут 3 способа http://exampledepot.com/egs/java.lang/GetClass.html?l=rel.
Может кто еще что-нибудь подскажет!
Re: Как узнать тип объекта разными способами в Java?
| От: | rsn81 | http://rsn81.wordpress.com |
| Дата: | 13.04.08 06:16 | |
| Оценка: | +2 | |
Здравствуйте, electromouse, Вы писали:
E>Как узнать тип объекта разными способами в Java?
E>Нашел тут 3 способа http://exampledepot.com/egs/java.lang/GetClass.html?l=rel.
Из приведенных способов, только первый делает то, что озвучено.
E>Может кто еще что-нибудь подскажет!
А зачем, метода getClass кажется несколько маловато?
Re[2]: Как узнать тип объекта разными способами в Java?
| От: | electromouse |
| Дата: | 13.04.08 09:15 |
| Оценка: |
Здравствуйте, rsn81, Вы писали:
R>А зачем, метода getClass кажется несколько маловато?
Ага маловато.
Может можно как-нибуть еще это сделать?
Re[3]: Как узнать тип объекта разными способами в Java?
| От: | Mr.Cat |
| Дата: | 13.04.08 09:50 |
| Оценка: |
Здравствуйте, electromouse, Вы писали:
E>Ага маловато.
E>Может можно как-нибуть еще это сделать?
Re[4]: Как узнать тип объекта разными способами в Java?
| От: | electromouse |
| Дата: | 13.04.08 11:04 |
| Оценка: |
Здравствуйте, Mr.Cat, Вы писали:
MC>Зачем?
Java — богатый ЯП, в нем много всего, мне интересно как решить эту задачу.
Прошу больше таких вопросов не задавать, я высказываться по сущетсву.
Можно еще использовать instanceof, чтобы проверить принадлежность ссылки на объект: interface или superclass.
Re[5]: Как узнать тип объекта разными способами в Java?
| От: | Аноним | |
| Дата: | 13.04.08 12:31 | |
| Оценка: | +1 | |
Здравствуйте, electromouse, Вы писали:
E>Java — богатый ЯП, в нем много всего, мне интересно как решить эту задачу.
Неправда. Java — бедный язык, в нём есть всего лишь один способ узнать класс объекта — метод Object.getClass().
По приведённой вами ссылки перечислены способы, которыми можно получить объект класса java.lang.Class.
Re[6]: Как узнать тип объекта разными способами в Java?
| От: | rsn81 | http://rsn81.wordpress.com |
| Дата: | 13.04.08 16:36 | |
| Оценка: |
Здравствуйте, <Аноним>, Вы писали:
А>Неправда. Java — бедный язык, в нём есть всего лишь один способ узнать класс объекта — метод Object.getClass().
Электрический мышонок прав: с помощью бесконечного числа проверок if (или full scan загруженных классов) с instanceof можно написать свой статический метод getClass.Аноним>
Re[7]: Как узнать тип объекта разными способами в Java?
| От: | electromouse |
| Дата: | 13.04.08 19:56 |
| Оценка: |
Здравствуйте, rsn81, Вы писали:
R>Электрический мышонок прав: с помощью бесконечного числа проверок if (или full scan загруженных классов) с instanceof можно написать свой статический метод getClass.
Бу га га.
Все спасибо за советы, вопрос снят.
оффтоп.
rsn81 не пойму, зачем у тебя пароль на резюме(шучу)?
Re[8]: Как узнать тип объекта разными способами в Java?
| От: | rsn81 | http://rsn81.wordpress.com |
| Дата: | 14.04.08 03:53 | |
| Оценка: |
Здравствуйте, electromouse, Вы писали:
E>оффтоп.
E>rsn81 не пойму, зачем у тебя пароль на резюме(шучу)?
Главное, гостевой доступ открыт.
Как посмотреть тип переменной java?
Это относится не к строгости, а к статичности. Теоретически можно через рефлексию, но она медленная и её использование лишает вас всех преимуществ статической типизации. Её применения стоит избегать, если вы не занимаетесь разработкой фреймворка или инструментальных средств.
27 мая 2019 в 17:45
Да и приведения в java-коде — это маркер архитектурных проблем, их использование тоже стоит сводить к минимуму.
27 мая 2019 в 17:47
если вы привели экземпляр класса к суперклассу, то это возможно всегда и никаких проверок не требуется. мало того, на этом стоит все ооп. если же вы пытаетесь узнать, какой именно экземпляр класса лежит в конкретной переменной,то у вас с вероятностью 99 процентов проблемы с архитектурой, потому как для того объект и приводится к родителю, чтобы потом использовать множество различных объектов одинаковым способом — вызывая методы у переменной типа родителя. разумеется,есть метод getClass(),который получает реальный класс объекта в переменной, после чего можно узнать имя-getName()
Как проверить тип объекта java
В Java можно узнать тип переменной, используя оператор instanceof . Он позволяет проверить, является ли объект экземпляром определенного класса.
public class Main public static void main(String[] args) String str = "Hello, Hexlet!"; Integer integer = 123; System.out.println(str instanceof String); // => true System.out.println(integer instanceof Integer); // => true System.out.println(str instanceof Object); // => true System.out.println(integer instanceof Object); // => true > >
В этом примере мы объявляем переменные str и integer , типы которых String и Integer соответственно. Затем мы используем оператор instanceof для проверки, являются ли эти переменные экземплярами классов String , Integer или Object .
Как видно из примера, переменная str является экземпляром класса String , а переменная integer — экземпляром класса Integer . Кроме того, обе переменные также являются экземплярами класса Object , так как все классы в Java наследуются от этого класса.
Оператор instanceof . Определение типа объекта. Примеры
Оператор instanceof используется для определения типа объекта во время выполнения программы. Определив тип объекта можно реализовать корректное приведение типов в случае, когда классы образуют иерархию. Если выполнить некорректное приведение к некоторому типу, то на этапе выполнения будет сгенерирована исключительная ситуация, что неприемлемо.
Общая форма оператора instanceof следующая
reference instanceof type
- reference – ссылка на объект (экземляр) класса;
- type – тип класса.
Результатом работы оператора instanceof есть значение true или false . Результат true возвращается в случаях:
- если ссылка reference относится к указанному типу;
- если ссылка reference может быть приведена к указанному типу.
В других случаях возвращается значение false .
2. Применение instanceof для классов, образующих иерархию. Пример
В примере демонстрируется корректное определение типа, к которому принадлежит объект класса. Реализовано два класса A и B , которые образуют иерархию. С целью демонстрации определяется тип соответствующего объекта с учетом того, что унаследованный класс расширяет возможности суперкласса.
// Оператор instanceof // Суперкласс A class A < int a; > // Класс B – наследует класс A class B extends A < int b; > public class TestInstanceOf < public static void main(String[] args) < A objA = new A(); B objB = new B(); if (objA instanceof A) System.out.println("objA is a instance of A"); else System.out.println("objA is not an instance of A"); if (objA instanceof B) System.out.println("objA can be cast to type B"); else System.out.println("objA can not be cast to type B"); if (objB instanceof A) System.out.println("objB can be cast to type A"); else System.out.println("objB can not be cast to type A"); if (objB instanceof B) System.out.println("objB is a instance of B"); else System.out.println("objB is not an instance of B"); > >
Результат выполнения программы
objA is a instance of A objA can not be cast to type B objB can be cast to type A objB is a instance of B
Как видно из результата, экземпляр унаследованного класса B может быть корректно приведен к суперклассу A . А вот экземпляр суперкласса A не может быть расширен к возможностям унаследованного класса B .
3. Применение instanceof для типа Object . Пример
В объектной модели языка Java все создаваемые классы унаследованы от класса Object . В следующем примере приходится это утверждение.
// Оператор instanceof // Суперкласс A class A < int a; > // Подкласс class B extends A < int b; > public class TestInstanceOf < public static void main(String[] args) < A objA = new A(); // экземпляр класса A B objB = new B(); // экземпляр класса B // Проверка на наследование от Object if (objA instanceof Object) System.out.println("objA can be cast to type Object"); else System.out.println("objA can not be cast to type Object"); if (objB instanceof Object) System.out.println("objB can be cast to type Object"); else System.out.println("objB can not be cast to type Object"); > >
Результат работы программы
objA can be cast to type Object objB can be cast to type Object
4. Применение instanceof для ссылки на базовый класс. Пример
Если классы образуют иерархию наследования, то ссылка на суперкласс может получать значение экземпляров любого производного класса. В примере ниже демонстрируется определение того, может ли ссылка на суперкласс быть приведена к типу производного класса.
// Оператор instanceof // Суперкласс A class A < int a; > // Подкласс B class B extends A < int b; > // Подкласс C class C extends B < int c; > // Подкласс D class D extends C < int d; > public class TestInstanceOf < public static void main(String[] args) < // экземпляры классов A, B, C, D A objA = new A(); B objB = new B(); C objC = new C(); D objD = new D(); // ссылка на суперкласс A A refA; // Ссылке на суперкласс можно присваивать значения // экземпляров (ссылок на экземпляры) производных классов refA = objA; if (refA instanceof A) System.out.println("refA is an instance of A"); else System.out.println("refA is not an instance of A"); // Перенаправить ссылку на экземпляр objB refA = objB; if (refA instanceof B) System.out.println("refA can be cast to type B"); else System.out.println("refA can not be cast to type B"); if (refA instanceof D) System.out.println("refA can be cast to type D"); else System.out.println("refA can not be cast to type D"); // Ссылка на objC refA = objC; if (refA instanceof B) System.out.println("refA can be cast to type B"); else System.out.println("refA can not be cast to type B"); > >
Результат выполнения программы
refA is an instance of A refA can be cast to type B refA can not be cast to type D refA can be cast to type B
