Java中instanceof的用法和实战_class<t> instanceof-程序员宅基地

技术标签: Java  Java从零到企业级电商项目实战(阶段二)  instanceof  

Java 中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,但是和>=,<=,==属同一类,它的作用是用来判断,instanceof 左边对象是否为instanceof 右边类的实例,返回一个boolean类型值。还可以用来判断子父类的所属关系。

用法1:
boolean result = object instanceof class 

参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 objectclass 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 objectnull,则返回 false

用法2、在做项目中用到的实战应用。
A  instanceof B ? A : C;

instanceof当做一个三目运算符,判断是否A可以转换B

package com.mmall.util;

import com.google.common.collect.Lists;
import com.mmall.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;

import java.text.SimpleDateFormat;
import java.util.List;

/**
 * @author Chakid
 * @since 2018-10-31 20:40
 */
@Slf4j
public class JsonUtil {
    

    private static ObjectMapper objectMapper = new ObjectMapper();

    static {
    

        //对象的所有字段全部列入
        objectMapper.setSerializationInclusion(Inclusion.ALWAYS);

        //取消默认转换timestamps形式  timestamps : 时间印花; 时间戳记
        objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);

        //忽略空Bean转json的错误
        objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);

        //所有的日期格式都统一为以下格式,yyyy-MM-dd HH:mm:ss
        objectMapper.setDateFormat(new SimpleDateFormat(DateTimeUtil.STANDARD_FORMAT));

        //忽略在json字符串中存在,但是在java对象中不存在对应的属性的情况,防止错误
        objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    }

    //将对象序列化为String
        public static <T> String obj2String(T obj){
    
        if(obj == null){
    
            return null;
        }
        try {
    
            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
        } catch (Exception e) {
    
            log.warn("Parse Object to string error",e);
            return  null;
        }
    }

    //将对象序列化为更美观的String(格式化好的)
    public static <T> String obj2StringPretty(T obj){
    
        if(obj == null){
    
            return null;
        }
        try {
    
            return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
        } catch (Exception e) {
    
            log.warn("Parse Object to string error",e);
            return  null;
        }
    }

    /**
     *  第一个T为声明该方法为泛型方法  第二个T为返回值的类型为T  第三个T为限制clazz的类型为T 比如List<T>
     * @param str
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T  String2Obj(String str,Class<T> clazz){
    
        if(StringUtils.isEmpty(str) || clazz == null){
    
            return null;
        }
        try {
    
            return clazz.equals(String.class) ? (T)str :objectMapper.readValue(str,clazz);
        } catch (Exception e) {
    
            log.warn("Parse string to Object error",e);
            return  null;
        }
    }

    //测试上面的函数
    public static void main(String[] args) {
    
        User u1 = new User();
        u1.setId(1);
        u1.setEmail("[email protected]");

        User u2 = new User();
        u2.setId(2);
        u2.setEmail("[email protected]");

        String user1Json = JsonUtil.obj2String(u1);

        String user1JsonPretty= JsonUtil.obj2StringPretty(u1);

        log.info("user1Json: {}",user1Json);

        log.info("user1JsonPretty: {}",user1JsonPretty);

        User user = JsonUtil.String2Obj(user1Json,User.class);


        List<User> userList = Lists.newArrayList();

        userList.add(u1);
        userList.add(u2);

        String userListStr =JsonUtil.obj2StringPretty(userList);

        log.info("=================");

        log.info(userListStr);

        System.out.println("end");


    }
}

主要看:

return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);

这两行,其他和这个知识点无关。obj 是否可以转换为String ,如可以就是(String) obj这个值,不行就是objectMapper.writeValueAsString(obj)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/czjlghndcy/article/details/83620887

智能推荐

警惕swizzle-程序员宅基地

文章浏览阅读69次。原文链接不知道什么时候开始,只要使用了swizzling都能被解读成是AOP开发,开发者张口嘴就是runtime,将其高高捧起,称之为黑魔法;以项目中各种method_swizzling为荣,却不知道这种做法破坏了代码的整体性,使关键逻辑支离破碎。本文基于iOS界的毒瘤一文,从另外的角度谈谈为什么我们应当警惕调用顺序性调用顺序性是链接文章讲述的的核心问题,它会破坏方法的原有执行顺序,导致意料..._python swizzle

openssl 编译-程序员宅基地

文章浏览阅读1k次,点赞40次,收藏8次。make。openssl compile

MySQL 5.7.27详细下载安装配置教程_mysql5.7下载-程序员宅基地

文章浏览阅读10w+次,点赞1.1k次,收藏3.2k次。本文详细介绍了Win 10下MySQL 5.7.27的安装及配置步骤,也列举出了一些常见的问题及解决方案_mysql5.7下载

【LeetCode】【Java】38. 外观数列-「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项....-程序员宅基地

文章浏览阅读1.2k次。38. 外观数列「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整数 n(1 ≤ n ≤ 30),输出外观数_外观数列

n&(n-1)位运算的妙用_n与n-1-程序员宅基地

文章浏览阅读2.2w次,点赞24次,收藏37次。做oj遇到一道题,求二进制中1的个数。发现有大佬用来(n&amp;n-1)。觉得很神奇。有空下来细想。确实是这么个道理。记录一下自己的分析过程一、n-1发生了什么①、二进制数n,n-1后,如果最后一位是0,将向前一位借2,2-1=1。最后一位为1。如果前一位为0,将继续向前一位借2,加上本身少掉的1.则变为1。一直遇到1。减为0.所以 二进制 xxxx10000-1 = xxxx01..._n与n-1

fatal: could not read Username for 解决方案-程序员宅基地

文章浏览阅读4w次,点赞7次,收藏12次。fatal: could not read Username for 'http:// 解决方案在部署drone(CICD软件)后,触发提交时,drone-runner执行拉取仓库代码(在自己部署的gogs上)时出现该问题Initialized empty Git repository in /drone/src/.git/+ git fetch origin +refs/heads/master:fatal: could not read Username for 'http://ip:port'_fatal: could not read username for

随便推点

子类继承父类重写父类的属性值问题_c# 子类修改父类的属性值为什么父类属性值没变-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。案例一试想一下代码的执行结果package com.syc.test;public class A { public static void main(String[] args) { FatherClass father = new FatherClass(); System.out.println(father.info); SonClass son = new ..._c# 子类修改父类的属性值为什么父类属性值没变

MAC风扇问题-程序员宅基地

文章浏览阅读142次。http://www.pc6.com/mac/113140.html转载于:https://www.cnblogs.com/yc5518/p/8276798.html_mac风扇不会自己启动

十个糟糕的程序员的行为-程序员宅基地

文章浏览阅读66次。之前本站发表过《优秀程序员的十个习惯》以及《程序员需要具备的基本技能》,那是我们需要去学习和培养的。这里,我们主要讨论十个糟糕程序员的特征,主要是需要让我们去避免和小心的。1) 情绪化的思维如果你开始使用不同颜色的眼光来看待这个世界的话,那么你可能会成为一个很糟糕的程序员。情绪化的思维或态度很有可能会把自己变成一个怪物。相信你经常可以看到很多很糟糕的程序会使用下面的这些语句:..._程序员工作态度负面案例

【附源码】JAVA计算机毕业设计校园设备巡检管理系统(源码+mysql+文档)-程序员宅基地

文章浏览阅读288次,点赞3次,收藏5次。从宏观角度来看,该系统能够提高校园设备管理的标准化和科学化水平,确保设备状态良好,及时预防和排除故障,从而为师生提供更加稳定和安全的学习环境。从微观角度而言,系统可以减轻管理人员的工作负担,通过自动化巡检减少人力资源的浪费,同时利用数据分析帮助管理者做出更合理的维护和更新决策。良好的设备管理还能延长设备的使用寿命,节约成本,对于推动校园资源的合理配置和可持续发展具有重要作用。综上所述,设计并实施校园设备巡检管理系统,不仅提升了设备管理的效率和质量,而且有助于构建智慧校园,促进教育资源的优化利用。

qq号的正则表达式html,js正则表达式用法实例:验证邮箱格式、密码复杂度、手机号码、QQ号码...-程序员宅基地

文章浏览阅读544次。没啥要描述的,直接上代码吧。其中引用了jquery~ 希望大家自行引用。只贴出验证部分代码,其余代码自行添加。如果属于初学者,请寻找有经验者指点。$(function () {$("input[name='sub']").on("click", function () {if (!isEmail($("input[name='email']").val())) {$("span[name='ema..._webqq号的正则表达式是什么

python输入出生日期和当前日期计算年龄_根据当前日期及出生日期,计算当前年龄(function)...-程序员宅基地

文章浏览阅读4.6k次。create or replace function F_GET_NL_BY_CSRQ(csrq date, v_date date)return number/** 根据出生日期和日期,计算当时的年龄*/asv_yr1 char(4);v_yr2 char(4);beginbeginv_yr1 := to_char(v_date,'mmdd');if csrq is not null thenv..._创建子vi计算年龄,出生日期和当前日期作为输入。用三个独立的整形控件来输入日期:

推荐文章

热门文章

相关标签