像一个函数能接受参数一样,一个泛型也能接受参数.这就是一个泛型经常被称为一个参数化类型的原因.但是不像函数用()传递参数,泛型是用<>传递参数的.声明一个泛型和声明一个普通类没有什么区别,只不过你把泛型的变量放在<>中. 比如,在JDK 5中,你可以这样声明一个java.util.List : List myList; E 称为类型变量.意味着一个变量将被一个类型替代.替代类型变量的值将被当作参数或返回类型.对于List接口来说,当一个实例被创建以后,E 将被当作一个add或别的函数的参数.E 也会使get或别的参数的返回值.下面是add和get的定义:
-----------------------------译者添加-------------------- List numberList= new ArrayList(); numberList.add(2.0); numberList.add(2); -----------------------------译者添加--------------------
public class GenericListTest { public static void main(String[] args) { // in JDK 1.4 List stringList1 = new ArrayList(); stringList1.add("Java 1.0 - 5.0"); stringList1.add("without generics"); // cast to java.lang.String String s1 = (String) stringList1.get(0); System.out.println(s1.toUpperCase());
// now with generics in JDK 5 List stringList2 = new ArrayList(); stringList2.add("Java 5.0"); stringList2.add("with generics"); // no need for type casting String s2 = stringList2.get(0); System.out.println(s2.toUpperCase()); } }
package com.brainysoftware.jdk5.app16; import java.util.ArrayList; import java.util.List; public class ListOfListsTest { public static void main(String[] args) { List listOfStrings = new ArrayList(); listOfStrings.add("Hello again"); List> listOfLists = new ArrayList>(); listOfLists.add(listOfStrings); String s = listOfLists.get(0).get(0); System.out.println(s); // prints "Hello again" } }
public class AllowedTypeTest { public static void doIt(List l) { } public static void main(String[] args) { List myList = new ArrayList(); // 这里将产生一个错误 doIt(myList); } }
public static void printList(List> list) { for (Object element : list) { System.out.println(element); } } public static void main(String[] args) { List list1 = new ArrayList(); list1.add("Hello"); list1.add("World"); printList(list1);
List list2 = new ArrayList(); list2.add(100); list2.add(200); printList(list2); } }
package com.brainysoftware.jdk5.app16; import java.util.ArrayList; import java.util.List; public class BoundedWildcardTest { public static double getAverage(List extends Number> numberList) { double total = 0.0; for (Number number : numberList) total += number.doubleValue(); return total/numberList.size(); }
public static void main(String[] args) { List integerList = new ArrayList(); integerList.add(3); integerList.add(30); integerList.add(300); System.out.println(getAverage(integerList)); // 111.0 List doubleList = new ArrayList(); doubleList.add(3.0); doubleList.add(33.0); System.out.println(getAverage(doubleList)); // 18.0 } }
下界规则 关键字extends定义了一个类型变量的上界。通过使用super关键字,我们可以定义一个类型变量的下界,尽管使用的情况不多。比如,如果一个函数的参数是List super Integer>,那么意味着你可以传递一个List的实例或者任何java.lang.Integer的超类(superclass)。
package com.brainysoftware.jdk5.app16; public class Point { T x; T y; public Point(T x, T y) { this.x = x; this.y = 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; } }
终端仿真器是一款用其它显示架构重现可视终端的计算机程序。换句话说就是终端仿真器能使哑终端看似像一台连接上了服务器的客户机。终端仿真器允许最终用户用文本用户界面和命令行来访问控制台和应用程序。(LCTT 译注:终端仿真器原意指对大型机-哑终端方式的模拟,不过在当今的 Linux 环境中,常指通过远程或本地方式连接的伪终端,俗称“终端”。)
你能从开源世界中找到大量的终端仿真器,它们
功能:在控制台每秒输出一次
代码:
package Main;
import javax.swing.Timer;
import java.awt.event.*;
public class T {
private static int count = 0;
public static void main(String[] args){
1,获取样式属性值
top 与顶部的距离
left 与左边的距离
right 与右边的距离
bottom 与下边的距离
zIndex 层叠层次
例子:获取左边的宽度,当css写在body标签中时
<div id="adver" style="position:absolute;top:50px;left:1000p
spring data jpa 支持以方法名进行查询/删除/统计。
查询的关键字为find
删除的关键字为delete/remove (>=1.7.x)
统计的关键字为count (>=1.7.x)
修改需要使用@Modifying注解
@Modifying
@Query("update User u set u.firstna
项目中controller的方法跳转的到ModelAndView类,一直很好奇spring怎么实现的?
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* yo
(1)npm是什么
npm is the package manager for node
官方网站:https://www.npmjs.com/
npm上有很多优秀的nodejs包,来解决常见的一些问题,比如用node-mysql,就可以方便通过nodejs链接到mysql,进行数据库的操作
在开发过程往往会需要用到其他的包,使用npm就可以下载这些包来供程序调用
&nb
Controller层的拦截器继承于HandlerInterceptorAdapter
HandlerInterceptorAdapter.java 1 public abstract class HandlerInterceptorAdapter implements HandlerIntercep