泛型 static <T> 用法

public Result<T> test(){ return null; }

public <T> Result<T> test(){ return null; }

public static <T> Result<T> test(){ return null; }

第一次没理解上面非静态方法可有或可无, 静态方法必须有,此次总结一下

一、定义方法代码示例

package com.pd.shop.common;

import lombok.Data;

@Data
public class Result1<T> {
    private T Data;

    Result1(T t) {
        this.Data = t;
    }

    public Result1<T> Result1_A(T t) {
        return new Result1(t);
    }

    public <T> Result1<T> Result1_A1(T t) {
        return new Result1(t);
    }

    public static <T> Result1<T> Result1_B(T t) {
        return new Result1(t);
    }
}

分析:
1.前置条件, Result1是非静态类, 且传入泛型T, T是非静态类型

2.非静态方法Result1_A或Result1_A1,为什么可有或可无?
       因为"非静态方法"的调用"需要"进行类的实例化,当实例化后, 已经可以"确定"T的类型,所以在调用非静态方法Result1_A或Result1_A1时,声明可有或可无

2.静态方法Result1_B,为什么需要有?
       因为"静态方法"的调用需要"不需要"进行类的实例化, 也就"不确定"T的类型, 所以在调用静态方法Result1_B时,需要声明


二、调用方法代码示例

package com.pd.shop.common;

import lombok.Data;

@Data
public class Result2 {

    public Result1<String> Result2_A(String t) {
        return new Result1<String>().Result1_A(t);
    }

    public <T> Result1<T> Result2_A1(T t) {
        return new Result1<T>().Result1_A(t);
    }

    public Result1<String> Result2_B(String t) {
        return Result1.Result1_B(t);
    }

    public <T> Result1<T> Result2_B1(T t) {
        return Result1.Result1_B(t);
    }
}

说明
1.类实例化的非静态方法调用
2.类不实例化的静态方法调用

posted @ 2021-03-11 15:22  预立科技  阅读(66)  评论(0编辑  收藏  举报