泛型

1.标识符不为基本数据类型,有自动装箱操作,Integer一切操作按数字类型进行,可避免类转换异常,若声明时未指明,则视为object类,依然正常运行

package commondy;

class Point<T> {
    private T x;
    private T y;

    public T getX() {
        return x;
    }

    public T getY() {
        return y;
    }

    public void setX(T x) {
        this.x = x;
    }

    public void setY(T y) {
        this.y = y;
    }
}

public class demo1 {
    public static void main(String args[]) {
        Point<Integer> p = new Point<Integer>();
        p.setX(30);
        System.out.println(p.getX() * 2);
    }
}
package commondy;

class Point<T> {
    private T x;

    public T getX() {
        return x;
    }
    public void setX(T x) {
        this.x = x;
    }
}

public class demo1 {
    public static void main(String args[]) {
        Point p = new Point();
        p.setX("李兴华");
        System.out.println(p.getX());
    }
}

2.通配符

可使用通配符实现泛型对象的引用传递,不能设置被泛型指定的内容,可设置null
package commondy;

class Point<T> {
    private T x;

    public T getX() {
        return x;
    }
    public void setX(T x) {
        this.x = x;
    }
}

public class demo1 {
    public static void main(String args[]) {
        Point<String> p = new Point<String>();
        p.setX("李兴华");
        fun(p);
    }
    public static void fun(Point<?> temp) {
        System.out.println(temp.getX());
    }
}

10.3泛型与子类继承的限制

子类泛型无法使用父类泛型进行接收,例如Info<string>不能使用Info<Object>进行接收,只能用<?>进行接收,但此时不能进行设置,可用null

10.4泛型接口

package commondy;

interface Info<T> {
    public T getVar();
}

class InfoImpl<T> implements Info<T> {
    private T var;

    public InfoImpl(T var) {
        this.var = var;
    }

    public void setVar(T var) {
        this.var = var;
    }

    public T getVar() {
        return this.var;
    }
}

public class demo1 {
    public static void main(String args[]) {
        InfoImpl<String> i = new InfoImpl<String>("Li");
        System.out.println(i.getVar());
    }
}
package commondy;

interface Info<T> {
    public T getVar();
}

class InfoImpl implements Info<String> {
    private String var;

    public InfoImpl(String var) {
        this.var = var;
    }

    public void setVar(String var) {
        this.var = var;
    }

    public String getVar() {
        return this.var;
    }
}

public class demo1 {
    public static void main(String args[]) {
        InfoImpl i = new InfoImpl("Li");
        System.out.println(i.getVar());
    }
}

10.5泛型方法
泛型方法的定义与其所在的类是否无关,数据传入时的类型就是参数的类型

package commondy;

class Demo {
    public <T> T fun(T t) {
        return t;
    }
}

public class demo1 {
    public static void main(String args[]) {
        Demo d = new Demo();
        String str = d.fun("李兴华");
        int i = d.fun(30);
        System.out.println(str);
        System.out.println(i);
    }
}

使用泛型方法实例化

package commondy;

class Info<T extends Number> {
    private T var;

    public T getVar() {
        return var;
    }

    public void setVar(T var) {
        this.var = var;
    }

    public String toString() {
        return this.var.toString();
    }
}

public class demo1 {
    public static void main(String args[]) {
        Info<Integer> i = fun(30);
        System.out.println(i.getVar());
    }

    public static <T extends Number> Info<T> fun(T tem) {
        Info<T> temp = new Info<T>();
        temp.setVar(tem);
        return temp;
    }
}

若传入泛型对象类型一致

package commondy;

class Info<T> {
    private T var;

    public T getVar() {
        return var;
    }

    public void setVar(T var) {
        this.var = var;
    }

    public String toString() {
        return this.var.toString();
    }
}

public class demo1 {
    public static void main(String args[]) {
        Info<String> i1 = new Info<String>();
        Info<String> i2 = new Info<String>();
        i1.setVar("HELLO");
        i2.setVar("Li");
        add(i1, i2);
    }

    public static <T> void add(Info<T> i, Info<T> j) {
        System.out.println(i.getVar() + " " + j.getVar());

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值。 假如我们现在...
    e347afbb188e阅读 1,508评论 0 1
  • 我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值。 假如我们现在...
    e347afbb188e阅读 2,047评论 0 0
  • 泛型类定义与使用 定义泛型//定义 class Point<T>{// 此处可以随便写标识符号 pr...
    陌上疏影凉阅读 2,563评论 0 0
  • 泛型的定义及使用 1. 定义泛型: 2. 类中使用泛型 3. 使用泛型类 4. 使用泛型的优势? 多泛型变量的定义...
    xue57233阅读 3,180评论 0 1
  • 我觉得共情的能力高的人,辨识度和识人的品质很高,使用客体的能力自然也就高,谈判的空间和策略也就更足 我觉得换位思考...
    956d9ce73cd5阅读 1,670评论 0 0