公司实习日志

文章详细解释了Java中集合为null和集合为空的区别,介绍了泛型<T>T的用法,以及T作为返回值和限制参数类型的场景。同时,文章讨论了instanceof关键字的用途和equals方法的重写步骤,并给出了MyBatis中@Param注解的使用示例,说明其在SQL参数绑定中的作用。
摘要由CSDN通过智能技术生成

集合为null和集合为空的区别:

集合为null:list=null | //空 为null时,表示List不存在,未分配内存。

集合为空list.size()或者list.isEmpty() | 代表已经创建了list,分配内存,长度为0,可以填充数据。List list = newArrayList()

1、<T>T 用法

这个<T> T 表示的是返回值T是泛型,T是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候,告诉你。

package  xxxx;
 
import java.util.ArrayList;
import java.util.List;
 
import org.apache.poi.ss.formula.functions.T;
 
public class Demo {
 
    public static void main(String[] args) {
 
        Demo demo = new Demo();
 
        //获取string类型
        List<String> array = new ArrayList<String>();
        array.add("test");
        array.add("doub");
        String str = demo.getListFisrt(array);
        System.out.println(str);
 
        //获取nums类型
        List<Integer> nums = new ArrayList<Integer>();
        nums.add(12);
        nums.add(13);
 
        Integer num = demo.getListFisrt(nums);
        System.out.println(num);
    }
    /**
     * 这个<T> T 可以传入任何类型的List
     * 参数T
     *     第一个 表示是泛型
     *     第二个 表示返回的是T类型的数据
     *     第三个 限制参数类型为T
     * @param data
     * @return
     */
    private <T> T getListFisrt(List<T> data) {
        if (data == null || data.size() == 0) {
            return null;
        }
        return data.get(0);
    }
 
}

2、T 用法
返回值,直接写T表示限制参数的类型,这种方法一般多用于共同操作一个类对象,然后获取里面的集合信息啥的。

package xxxxxx;
 
import java.util.ArrayList;
import java.util.List;
 
public class Demo2<T> {
 
    public static void main(String[] args) {
 
        //限制T 为String 类型
        Demo2<String> demo = new Demo2<String>();
 
        //获取string类型
        List<String> array = new ArrayList<String>();
        array.add("test");
        array.add("doub");
        String str = demo.getListFisrt(array);
        System.out.println(str);
 
        //获取Integer类型 T 为Integer类型
        Demo2<Integer> demo2 = new Demo2<Integer>();
        List<Integer> nums = new ArrayList<Integer>();
        nums.add(12);
        nums.add(13);
        Integer num = demo2.getListFisrt(nums);
        System.out.println(num);
    }
 
    /**
     * 这个只能传递T类型的数据
     * 返回值 就是Demo<T> 实例化传递的对象类型
     * @param data
     * @return
     */
    private T getListFisrt(List<T> data) {
        if (data == null || data.size() == 0) {
            return null;
        }
        return data.get(0);
    }
}

总结一句话:
第一种用法Demo类的getListFisrt方法可以接受任意类型List参数,
第二种Demo类在初始化的时候已经限定了T的类型,所以getListFirst方法只能接受List类型的参数。

原文链接:Java之泛型<T> T与T的用法_<t> (of t) 实际t的操作_北漂编程小王子的博客-CSDN博客

  •  instanceof 是 Java 的保留关键字。
  •  作用是:测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型
  •  instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
  • 说明下:类的实例包含本身的实例,以及所有直接或间接子类的实例
  • instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误

改写equals的步骤
        使用==操作符检查“实参是否为指向对象的一个引用”。如果是的话,则返回true。
使用当前对象(this)的canEqual方法检查是否可以与目标对象(实参)进行比较。如果不是的话,则返回false。
        使用instanceof操作符(注1)检查“实参是否为正确的类型”。如果“正确”的类型不止一个,按优先级(注2)依次检查每一个“正确”的类型。如果所有的“正确”类型都不是,则返回false。
针对每一个符合要求的“正确”类型,做以下处理:把实参转换到“正确”的类型。因为前面已经有了instanceof的检查,所以这个转换可确保成功。
        使用目标对象(转换类型之后的实参)的canEqual方法检查是否可以与当前对象(this)进行比较。如果不是的话,则返回false(注3)。对于该类中每一个“关键”域,检查实参中的域与当前对象中对应的域值是否匹配。检查完毕将结果直接返回(注3)。

首先直接给出类代码的执行顺序

  

 普通方法的执行顺序?

1、概述
      首先明确这个注解是为SQL语句中参数赋值而服务的。 @Param的作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param("userId") int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。

2、实例:
    实例一:@Param注解基本类型的参数

mapper中的方法:

public User selectUser(@Param("userName") String name,@Param("password") String pwd);
  映射到xml中的<select>标签

<select id="selectUser" resultMap="User">  
   select * from user  where user_name = #{userName} and user_password=#{password}  
</select>


     其中where user_name = #{userName} and user_password = #{password}中的userName和password都是从注解@Param()里面取出来的,取出来的值就是方法中形式参数 String name 和 String pwd的值。

    实例二:@Param注解JavaBean对象

   SQL语句通过@Param注解中的别名把对象中的属性取出来然后复制到mapper中的方法:

public List<User> getAllUser(@Param("user") User u);
    映射到xml中的<select>标签

<select id="getAllUser" parameterType="com.vo.User" resultMap="userMapper">  
        select   
        from user t where 1=1  
             and   t.user_name = #{user.userName}  
              and   t.user_age = #{user.userAge}  
    </select>  

 
3、注意点
   当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},${}取值都可以。

   当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。

   不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。
 

    @Select("SELECT * from Table where id = #{id}")
    Enchashment selectUserById(User user);

————————————————
版权声明:本文为CSDN博主「晓风残月一望关河萧索」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Sunshineoe/article/details/114697944

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值