首页 > 编程语言 >java 泛型

java 泛型

时间:2023-05-24 17:11:44浏览次数:36  
标签:java void class var static 泛型 public

泛型类

// 简单泛型
class Point<T>{         // 此处可以随便写标识符号,T是type的简称  
    private T var ;     
    public T getVar(){  
        return var ;  
    }  
    public void setVar(T var){  
        this.var = var ;  
    }  
} 
// 多元泛型
class Notepad<K,V>{     
    private K key ;     
    private V value ;   
    public K getKey(){  
        return this.key ;  
    }  
    public V getValue(){  
        return this.value ;  
    }  
    public void setKey(K key){  
        this.key = key ;  
    }  
    public void setValue(V value){  
        this.value = value ;  
    }  
} 
public class GenericsDemo09{  
    public static void main(String args[]){  
        Notepad<String,Integer> t = new Notepad<String,Integer>() ;  
        t.setKey("汤姆") ;   
        t.setValue(20) ;      
        System.out.print("姓名;" + t.getKey()) ;     
        System.out.print(",年龄;" + t.getValue()) ;      
    }  
}

泛型接口

// 泛型接口,带一个抽象方法
interface Info<T>{       
    public T getVar() ;
}  
// 泛型接口实现类
class InfoImpl<T> implements Info<T>{ 
    private T var ;        
    public InfoImpl(T var){    
        this.setVar(var) ;    
    }  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public T getVar(){  
        return this.var ;  
    }  
} 
public class GenericsDemo24{  
    public static void main(String arsg[]){  
        Info<String> i = new InfoImpl<String>("汤姆") ; 
        System.out.println("内容:" + i.getVar()) ;  
    }  
}  

泛型方法

    // 参数类型是 Number 子类
    private static  <T extends Number> double add(T a, T b) {
        return a.doubleValue() + b.doubleValue();
    }

    // 带泛型的字节码对象作为参数
    private static <T> T test(String s, Class<T> t) {
        return JSONObject.parseObject(string, t);
    }

    public static void main(String[] args) {
        add(1, 2);
        User user = test("{\"name\":\"Marry\",\"age\":18}", User.class);
    }

泛型上下限

// 指定上限:只能是 Number 或其子类
static class Info<T extends Number>{    
}

// 指定下限(只能用在方法上):必须是 Integer 或其父类
public static void test(Info<? super Integer> info){
}

标签:java,void,class,var,static,泛型,public
From: https://www.cnblogs.com/hangychn/p/17116972.html

相关文章

  • java 反射:类和属性是否有注解
    booleanisAnnotationPresent(Class<?extendsAnnotation>annotationClass)元素上是否包含指定类型的注解,存在则返回true,否则返回false<AextendsAnnotation>AgetAnnotation(Class<A>annotationClass)获取元素上指定的注解,如果元素没有该注解返回null<AextendsAnn......
  • java 各种锁
    乐观锁悲观锁这不是一种具体的锁,是一个广义的概念,可以认为所有的锁都是悲观或乐观的,java中绝大部分锁都是悲观锁(synchronized、ReentrantLock等);也有乐观锁(原子类的递增、读写锁的读锁),java的乐观锁都是cas实现的乐观锁顾名思义,老是假设自己在操作数据的同时一定会有别的数......
  • Java大文件分片上传/多线程上传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求         <formid="postForm"action="${pageContext.request.contextPath}/UploadServlet"method="post"e......
  • python hmac_sha256 转为 java
    Javahmacsha256packagecom.example;importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;importjavax.crypto.Mac;importjavax.crypto.spec.SecretKeySpec;importjavax.xml.bind.DatatypeConverter;publicclassMain......
  • java 多线程:synchronized 详解
    总结一个锁对象只能同时被一个线程持有,分为对象锁和类锁对象锁:每个对象都可以作为锁(几个不同的对象就是几个锁)类锁:字节码对象也能作为锁(全局唯一)同步方法不能自定义锁,只能是默认的锁(非静态:this,静态:class);同步代码块默认的锁和方法一样(非静态:this,静态:class,普通方法里面可以......
  • Java开启异步的两种方式
    二、Java开启异步的两种方式1、注解开启:@Async1.1、配置异步的线程池必须配置异步线程池,否则异步不会生效。@EnableAsync注解:指定异步线程池。不指定默认使用:SimpleAsyncTaskExecutor线程池SimpleAsyncTaskExecutor是一个最简单的线程池,它没有任何的线程相关参数配置,它会为......
  • 用命令行工具运行java文件
     1、若java文件有packagepackagequitStu;publicclassMain{publicstaticvoidmain(String[]args){for(Stringstr:args){if(str.equals("11")){System.out.println("-v1.0");brea......
  • Java如何生成随机数?要不要了解一下!
    前言我们在学习Java基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍Java随机数。一、Random类介绍在Java中使用Random工具类来生成随机数,该类在java.util包下,在JDK1.0版本就存在了。Random单词本身就是随机、随意、任意的意思......
  • Java配置线程池
    一、Java配置线程池1、线程池分类、其他1.1、分类IO密集型和CPU密集型任务的特点不同,因此针对不同类型的任务,选择不同类型的线程池可以获得更好的性能表现。1.1.IO密集型任务​ IO密集型任务的特点是需要频繁读写磁盘、网络或者其他IO资源,执行时间长,CPU占用率较低。对......
  • 流程表单JavaScript代码
    ----订单流程-----------//表单加载初始化时functionpreinit(){}//表单加载完成,isrun代表流程是否流转中1-是,0-否functionLoaded(isrun){$("#om_order_status").attr("disabled","disabled");......