Java笔记10-30

泛型接口

泛型接口和泛型类的声明方式一致。泛型接口的具体类型需要在实现类中进行声明。

语法结构

public interface 接口名<泛型表示符号> {
}

示例:(接口)

public interface Igeneric <T>{
    T getName(T name);
}

示例:(接口实现类)

public class IgenericImp1 implements Igeneric<String>{

    @Override
    public String getName(String name) {
        return name;
    }
}

示例:(测试类)

public class Test1 {
    public static void main(String[] args) {
        IgenericImp1 igeneric = new IgenericImp1();
        String name = igeneric.getName("gugugu");
        System.out.println(name);

        Igeneric<String> igeneric1 = new IgenericImp1();
        String name1 = igeneric1.getName("maomaotou");
        System.out.println(name1);
    }
}

泛型方法

泛型类中所定义的泛型,在方法中也可以使用。但是,我们经常需要仅仅在某一个方法上使用泛型,这时候可以使用泛型方法。
泛型方法是指将方法的参数类型定义成泛型,以便在调用时接收不同类型的参数。 类型参数可以有多个,用逗号隔开,例:<K,V>。定义时,类型参数一般放到返回值前面。
调用泛型方法时,不需要像泛型类那样告诉编译器是什么类型,编译器可以自动推断出类型来。

非静态方法

语法结构
public <泛型表示符号> void getName(泛型表示符号 name) {
}
public <泛型表示符号> 泛型表示符号 getName(泛型表示符 name) {
}

定义泛型方法后,方法中无论是返回值类型还是方法参数都能使用泛型来作为类型。
示例:

public class MethodGeneric {
    public <T> void setName(T name) {
        System.out.println(name);
    }

    public <T> T getName(T name) {
        return name;
    }
}
public class Test2 {
    public static void main(String[] args) {
        MethodGeneric methodGeneric = new MethodGeneric();
        methodGeneric.setName("maomao");
        methodGeneric.setName(123);

        MethodGeneric methodGeneric2 = new MethodGeneric();
        String name = methodGeneric2.getName("gugugu");
        Integer name1 = methodGeneric2.getName(111);
        System.out.println(name);
        System.out.println(name1);
    }
}

静态方法

静态方法中使用泛型时有一种情况需要注意,那就是静态方法无法访问类上定义的泛型。如果静态方法操作的引用数据类型不确定的时候,必须要将泛型定义在方法上。

语法结构
public static <泛型表示符号> void getName(泛型表示符号 name) {
}
public static <泛型表示符号> 泛型表示符号 getName(泛型表示符号 name) {
}

示例:

public class MethodGeneric {
    public static <T> void setFlag(T flag) {
        System.out.println(flag);
    }

    public static <T> T getFlag(T flag) {
        return flag;
    }
}
public class Test3 {
    public static void main(String[] args) {
        MethodGeneric.setFlag("gugugu");
        MethodGeneric.setFlag(333);

        String flag = MethodGeneric.getFlag("maomao");
        System.out.println(flag);
        Integer flag1 = MethodGeneric.getFlag(234);
        System.out.println(flag1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值