typeof в Java 8 - PullRequest
       53

typeof в Java 8

0 голосов
/ 08 апреля 2020

Если мы хотим проверить тип данных переменной в javascript, мы можем использовать оператор typeof.

Рассмотрим этот фрагмент

var c = 'str' ;
console.log(typeof(c)); // string
c = 123 ;
console.log(typeof(c)); // number
c =  {} ;
console.log(typeof(c)) ; // object

Я хочу добиться той же функциональности в Java 8. Java не имеет оператора typeof, но есть оператор instanceof для проверки типов.

System.out.println("str" instanceof String);  // true 

Integer a  = 12 ;
System.out.println(a instanceof Integer);


Float f = 12.3f
System.out.println(f instanceof Float); // true

Можем ли мы сделать что-нибудь лучше? Плюс instanceof не поддерживает примитивные типы.

Есть ли какие-либо подходы в java 8? Любые подходы будут оценены.

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Вы можете использовать метод getClass(), чтобы получить тип объекта, который вы используете:

Object obj = null;
obj = new ArrayList<String>();
System.out.println(obj.getClass());

obj = "dummy";
System.out.println(obj.getClass());

obj = 4;
System.out.println(obj.getClass());

Это сгенерирует следующий вывод:

class java.util.ArrayList
class java.lang.String
class java.lang.Integer

Как вы видите, он покажет тип объекта, на который ссылается переменная, который может не совпадать с типом переменной (в данном случае Object).

Для примитива Для типов нет доступного решения, так как проблема знания типа, хранящегося в переменной, не существует. Переменная примитивного типа может содержать только значения этого типа. Поскольку вы должны определить переменную (или параметр) где-то, вы уже знаете ее тип и значения, которые она может содержать. Для базовых значений не существует «базового» типа, который можно использовать аналогично типу Object, который является базовым типом для всех объектов в java.

0 голосов
/ 09 апреля 2020

Спасибо @Progman за метод getClass().

class check{

    static Class typeof(Integer a)
    {
        return a.getClass();
    }
    static Class typeof(Character c)
    {
        return c.getClass();
    }
    static Class typeof(Float f)
    {
        return f.getClass();
    }
    static Class typeof(Double d)
    {
        return d.getClass();
    }
    static Class typeof(Long l)
    {
        return l.getClass();
    }
    static Class typeof(String s)
    {
        return s.getClass();
    }

}

Теперь мы проверяем как примитивные, так и не примитивные типы

check.typeof(12) ; // class java.lang.Integer

check.typeof(12.23f) ; // class java.lang.Float

check.typeof('c') ; // class java.lang.Character

check.typeof("str") ; // class java.lang.String

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...