1. Введение
существуетJavaПреобразование типов и оценка типов часто встречаются в этом строго типизированном языке. считай это сегодняJavaметод определения типа.
2. instanceof
instanceof
даJavaОператор, используемый для определения того, является ли объект экземпляром класса. использование:
boolean isInstance = obj instanceof Class
вobj
Как экземпляр объекта,Class
Имя класса или имя интерфейса, когдаobj
заClass
, или экземпляр его подкласса, или экземпляр класса реализации его интерфейса, все возвращаютtrue
, иначе возвратfalse
.
должен быть в курсеobj
Должен быть ссылочным, а не примитивным типом, следующая формула не будет компилироваться:
int integer = 0;
// 编译时会报错
boolean isInstance = integer instanceof Number
Кроме того, компилятор проверяет
instanceof
Выражениеobj
Можно ли преобразовать в правоClass
Если тип не может быть преобразован, будет сообщено об ошибке напрямую.Если тип не может быть определен, он также пройдет компиляцию.
3. Class.isInstance
// Class.isInstance 等效于instanceof 操作符
boolean ret = entity instanceof UserInfo;
boolean isInstance = UserInfo.class.isInstance(entity);
Как показано вышеClass.isInstance
равноinstanceof
оператор. Метод находится вJava 1.1вводится, потому что его можно использовать динамически. Если параметр неnull
, и может запускаться безClassCastException
будет возвращено при успешном приведении к левому ссылочному типу в случаеtrue
.
4. Class.isAssignableFrom
Вызывающий и параметры методаClass
Object, вызывающий объект — это родительский класс, а параметр — это он сам или его подкласс.
boolean assignableFrom = List.class.isAssignableFrom(ArrayList.class);
Он часто используется для определения отношения наследования родитель-потомок.Я использовал этот метод в учебной статье плагина Mybatis, чтобы определить, является ли класс классом реализации интерфейса.
5. Class.isPrimitive
Этот метод в основном используется для определенияClass
Это примитивный тип (boolean
,char
,byte
,short
,int
,long
,float
,double
).
//true
boolean primitive = int.class.isPrimitive();
Это должно решить проблему базового суждения о типах, о которой мы упоминали в разделе 2 этой статьи. Но он может только судить, является ли определенный тип базовым типом, а не специфичным для определенного типа.
Однако обратите внимание, что тип-оболочка базового типа вернет false, если этот метод используется для оценки результата.
6. Резюме
Эти типы суждений более распространены, чем первые два, а возможности последних двух ограничены. Я не знаю, что из этого вы использовали? Добро пожаловать, чтобы оставить сообщение для обсуждения. Я:Код Фермер Маленький Толстый Брат, уделяйте больше внимания и делитесь знаниями.