Java记录 -74- 自定义泛型

  1. 简单的泛型定义使用:
public class GenericFoo<T> {

    private T foo;
    
    public void setFoo(T foo){
        this.foo = foo;
    }
    public T getFoo(){
        return this.foo;
    }
    
    public static void main(String[] args){
        //GenericFoo is a raw type, References to generic type GenericFoo<T> should be parameterized.
        GenericFoo foo = new GenericFoo(); 
        
        GenericFoo<String> sFoo = new GenericFoo<String>();
        GenericFoo<Integer> iFoo = new GenericFoo<Integer>();
        
        sFoo.setFoo("string foo");
//        sFoo.setFoo(11); //这里只能放置String类型的,放置11在编译时就会报错。
        iFoo.setFoo(11);
    }
}

2.定义两个泛型,以及泛型数组的定义使用:

public class GenericFoo2<T,E> {

    private T foo1;
    private E foo2;
    private T[] arrays;
    
    public T getFoo1() {
        return foo1;
    }
    public void setFoo1(T foo1) {
        this.foo1 = foo1;
    }
    public E getFoo2() {
        return foo2;
    }
    public void setFoo2(E foo2) {
        this.foo2 = foo2;
    }
    public T[] getArrays() {
        return arrays;
    }
    public void setArrays(T[] arrays) {
        this.arrays = arrays;
    }
    public static void main(String[] args){
        GenericFoo2<String,Boolean> gf = new GenericFoo2<String,Boolean>();
        gf.setFoo1("string");
        gf.setFoo2(false);
        gf.setArrays(new String[]{"aa","bb"});
    }
}

3.模仿ArrayList实现集合泛型化:

public class GenericCollection<E> {

    private Object[] array;
    private int index;
    
    public GenericCollection(){
        this(10);
    }
    public GenericCollection(int capacity){
        array = new Object[capacity];
    }
    
    public void add(E e){
        array[index++] = e;
    }
    public E get(int index){
        return (E)array[index];
    }
    
    public static void main(String[] args){
        GenericCollection<Integer> gc = new GenericCollection<Integer>();
        for(int i=0;i<10;i++){
            gc.add(i*2);
        }
        for(int i=0;i<10;i++){
            System.out.println(gc.get(i));
        }
    }
}
时间: 2024-10-24 00:58:56

Java记录 -74- 自定义泛型的相关文章

JAVA基础_自定义泛型

泛型的来源 在Java中,泛型借鉴了C++的模版函数,从而引入了泛型. C++泛型 int add(int x,int y){ return x + y; } float add(float x.float y){ return x + y; } double add(double x,double y){ return x + y; } // 泛型函数对上面的整数,浮点数的抽象和实现 template<class T> T add(T x,T y){ return x + y; } 自定义泛

java JDK8 学习笔记——第18章 自定义泛型、枚举与注释

第十八章 自定义泛型.枚举与注释 18.1 自定义泛型 泛型定义: (1)仅定义在方法上的泛型语法 (2)用来限制泛型可用类型的extends与super关键字(3)?类型通配字符的使用 18.1.1 使用extends与? 1.若extends之后指定了类与接口,想再指定其他接口,可以使用&连接. 2.如果B是A的子类,而Node< B>可视为一种Node< A>,则称Node具有共变性或有弹性的.Java泛型不具有共变性,可以使用类型通配字符?与extends来声明变量

【Android实战】记录自学自定义GifView过程,能同时支持gif和其他图片!【实用篇】

之前写了一篇博客,<[Android实战]记录自学自定义GifView过程,详解属性那些事![学习篇]> 关于自定义GifView的,详细讲解了学习过程及遇到的一些类的解释,然后完成了一个项目,能通过在xml加入自定义 view (MyGifView)中加入自定义属性(my:gif_src = "@drawable/coffee"),达到播放gif图片的效果. 但是,有几个问题 1.gif_src 属性只支持 gif 图,并不支持其他类型的图片 2.只支持默认的引用图片,不

Java使用图片自定义登录窗体

一.问题概述 Java是一门面向对象的编程语言,从出版至今,Java对其自身不断改进,Java的图形界面编程也做的越来越好,从AWT到更高级的Swing.但是,我们的需求永远是无法满足的,有时候我们需要自定义窗体,特别是一张漂亮的图片做一个窗体,那就再好不过了.那么,今天我就把用图片自定义应用窗体的方法分享给大家. 二.实现方法 1.用图片自定义应用窗体效果图: 图1 Java使用图片自定义应用窗体效果图 2.创建一个类继承Swing中JFrame,然后定义一个BufferedImage变量,用

java核心(九):泛型

一.泛型的目的 泛型解决的是:向下转型时存在的安全隐患: 泛型的核心是:在定义类或接口的时候,不需要显示地声明参数或属性的类型. 二.类中使用泛型 注:在类.接口或方法中,泛型可以定义多个,泛型的名称自定义: 注:使用泛型中,在显示指定具体类型时,只能是引用类型,不能是基本数据类型: 注:使用泛型中,如果没有显示指定具体类型,则系统默认使用Object作为具体类型: package com.study.Type; /** * 在声明类的时候,定义了两个泛型:T.A * @param <T> *

Java基础笔记:泛型

内容:Java中的泛型 优秀文章:新浪博客-海洋星球:http://blog.sina.com.cn/s/blog_44c1e6da0100cus3.html书籍:细说Java.疯狂Java讲义 说明:泛型是于Java SE1.5添加的新特性:泛型的本质是参数化类型,简单来说就是将泛型看作一个或多个参数,使用这个参数的代码片段可以由任何具体类类型的参数来替换:泛型的参数类型只能是类类型,不能是简单类型(简单类型是指不能再简化的编程语言内置数据类型,java中有实数-float-double.整数

通过反射创建自定义泛型的实例。

比如有这样一个泛型:Demo.GenericsSimple<T,TT> 我想要通过反射创建一个Demo.GenericsSimple<string,int>的实例可以通过下面的格式进行创建: System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("命名空间.User`形参数量N[[1形参类型全名,形参类型所在的程 序集名称],[2形参类型全名,形参类型所在的程序集名称],[3形参类型全名,形参类型

Java集合框架之泛型

广州疯狂软件教育Java培训,iOS培训分享 泛型:1.5版本以后出现的新特性.用于解决安全问题,是一个安全机制. 好处: 1.将运行时期出现问题ClassCaseException,转移到了编译时期. 2.方便与程序员解决问题.让运行时事情减少,安全. 3.避免了强制类型转换 泛型格式:通过<>来定义要操作的引用数据类型 什么时候写泛型: 在集合框架中和常见 只要见到<>就要定义泛型 import java.util.Comparator; import java.util.It

.NET基础之自定义泛型

在.NET中泛型使用非常频繁,在控制台应用程序中,默认的引入了System.Collection.Generics名称空间,其中就提供了我们经常使用的泛型:List<T>和Dictionary<T>,相信用过它们的都知道它们的强大.还有一种我们经常使用的简单的泛型:System.Nullable<T>,即可空类型.我们可以: System.Nullable<int> nullableInt; 声明一个可空的int类型,由于C#语法对这个做了简化通常我们都不这

恶补java(十)---泛型与集合的再学习

其余的就不多说了,一切都在代码中 package com.gc.generic; /** * JDK5 之前集合对象使用问题: * 1.向集合添加任何类型对象 * 2.从集合取出对象时,数据类型丢失,使用与类型相关方法,强制类型转换 * 存在安全隐患 * * ***************************** * * JDK5中的泛型:允许程序员使用泛型技术限制集合的处理类型 * List<String> list=new ArrayList<String>(); * 从而