Java 泛型接口 、方法、通配符 工厂模式改进

本文介绍了Java中泛型的使用,旨在解决类型转换安全问题,通过示例展示了泛型类、方法及通配符的上下限。同时,讨论了工厂模式的改进,利用泛型实现更灵活的实例化。在示例代码中,泛型用于限制方法参数类型,提高代码的类型安全性,并通过工厂方法创建不同类型的对象。
摘要由CSDN通过智能技术生成

1、 泛型从JDK1.5之后追加到Java语言里面的,其主要目的是为了解决ClassCastException的问题,在进行对象的向下转型时,永远都存在有安全隐患。可以编译,运行错误 解决大多部分

2、而泛型的本质在于,类中的属性或方法的参数与返回值可以由对象实例化的时候动态决定。

3、方法不能重载 默认Object 警告

注: tsy.java使用了未经检查或不安全的操作。
  注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

4、

·?extends 类:设置泛型上限;|-例如:"? extends Number":表示该泛型类型只允许设置Number或者Number的子类

·? super 类: 设置泛型的下限: |-例如:"? super String":只能够使用String或其父类。

package com.msc.example;

import java.util.Arrays;

interface IPoint<S>{
    public String print(S s) ;
}
class PointImpl<T> implements IPoint<T>{
    private T x ;
    private T y ;
    public PointImpl () {} ;
    public PointImpl(T x,T y) {
        this.x = x ;
        this.y = y ;
    }
    public void setX(T x){
        this.x = x ;
    }
    public void setY(T y) {
        this.y = y;
    }
    public T getY() {
        return y;
    }
    public T getX() {
        return x;
    }
    @Override
    public String print(T t) {
        return "泛型接口" + t ;
    }
}

public class GenerPara {
    public static void main(String[] args) {
        //   Point<Integer> point = new Point<Integer>() ; 17之后可以省略
        PointImpl<Integer> point = new PointImpl<>(10,20) ;
        fun(point);
        IPoint<String> ipoint = new PointImpl<>();
        System.out.println(ipoint.print("000") );
        String str[] = fun("mmm","kkkk") ;
        System.out.println(Arrays.toString(str));
        Integer in[] = fun(1,2,3);
        System.out.println(Arrays.toString(in));
    }
    //不能重载
    public  static void fun(PointImpl<? extends Number>temp) {
        System.out.println(temp.getY());
    }

    public static void funB(PointImpl<? super String>temp) {
        System.out.println(temp.getX());
    }
    public static <T> T[] fun(T ... args){
        return args ;
    }
}

工厂模式改进

package com.msc.example;
interface IFood{
     public void eat() ;
}
class Factory{
    public static <T> T getInstance(String classname) {
        switch(classname){
            case "bread": {
                return (T) new Bread();
            } case "milk" : {
                return (T) new Milk();
            } default:{
                return null;
            }
        }
    }
}
class Bread implements IFood{
    @Override
    public void eat(){
        System.out.println("吃面包");
    }
}
class Milk implements IFood{
    @Override
    public void eat() {
        System.out.println("喝牛奶");
    }
}

public class FactoryModel {
    public static void main(String[] args) {
        IFood ifood = Factory.getInstance("milk");
        ifood.eat();
        ifood = Factory.getInstance("bread");
        ifood.eat();
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隔壁de小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值