public T createJavaBean(Class classz) throws Exception{
return classz.newInstance();
}
//定义了T类型,说明参数是某一类的Class对象,返回值类型则为该类型的实例。
//那么传入的参数类型一确定,那么它的返回值类型也就确定了。所以返回值不是Object,而是实际的类型。
//调用时:Person person = createPerson(Person.class);而不需要类型转换
如果createJavaBean 只能够创建Person 及其子类型 ,其它的类型不能创建 。那么就应该定义T类型的范围 : T extends Person,说明T只能是Person 或其子类型。
public T createPerson(Class classz) throws Exception{
return classz.newInstance();
}
调用:BlackPerson blacPerson = createPerson(BlackPerson.class);
//BlackPerson是Person 的子类。
createPerson(String.class);//这行编译报错
void test(List extends Person> list){
Person person = list.get(0);//调用非泛型方法,返回值类型为?,未明确的类型,上溯到类型上限 Person
//list.add(new Person());//调用泛型方法,编译不过去
}
AbstractCollection 源码:
public abstract class AbstractCollection implements Collection {
public boolean containsAll(Collection> c) {
Iterator> e = c.iterator();
while (e.hasNext())
if (!contains(e.next()))
return false;
return true;
}
public boolean contains(Object o) {
Iterator e = iterator();
if (o==null) {
while (e.hasNext())
if (e.next()==null)
return true;
} else {
while (e.hasNext())
if (o.equals(e.next()))
return true;
}
return false;
}
public boolean addAll(Collection extends E> c) {
boolean modified = false;
Iterator extends E> e = c.iterator();
while (e.hasNext()) {
if (add(e.next()))
modified = true;
}
return modified;
}
}
源码中:
1.方法 containsAll(Collection> c) ,参数可以是任意类型的 Collection。
public abstract class TypeReference {
private final Type rawType;//T的实际类型
protected TypeReference() {
rawType = getSuperclassTypeParameter(getClass());
}
Type getSuperclassTypeParameter(Class> clazz) {
Type genericSuperclass = clazz.getGenericSuperclass();
if (genericSuperclass instanceof Class) {
// try to climb up the hierarchy until meet something useful
if (TypeReference.class != genericSuperclass) {
return getSuperclassTypeParameter(clazz.getSuperclass());
}
throw new RuntimeException("'" + getClass() + "' extends TypeReference but misses the type parameter. "
+ "Remove the extension or add a type parameter to it.");
}
Type rawType = ((ParameterizedType) genericSuperclass).getActualTypeArguments()[0];
// TODO remove this when Reflector is fixed to return Types
if (rawType instanceof ParameterizedType) {
rawType = ((ParameterizedType) rawType).getRawType();
}
return rawType;
}
public final Type getRawType() {
return rawType;
}
@Override
public String toString() {
return rawType.toString();
}
}
DAO 类扩展 TypeReference:
public class Dao extends TypeReference{
public T queryOne() throws Exception{
T t = ((Class)this.getRawType()).newInstance();
Map dataMap = new HashMap();//数据查询结果
dataMap.put("name", "ll");//模拟数据
BeanUtils.populate(t, dataMap);
return t;
}
}
PersonDao 扩展了 Dao:
public class PersonDao extends Dao {//这里指明T的类型,要不然获取不到
public static void main(String args []){
try{
PersonDao personDao = new PersonDao();
Person person = personDao.queryOne();
System.out.println(person);//输出:Person [name=ll]
}catch(Exception e){
e.printStackTrace();
}
}
}
Enum是计算机编程语言中的一种数据类型---枚举类型。 在实际问题中,有些变量的取值被限定在一个有限的范围内。 例如,一个星期内只有七天 我们通常这样实现上面的定义:
public String monday;
public String tuesday;
public String wensday;
public String thursday
java.lang.IllegalStateException: No matching PlatformTransactionManager bean found for qualifier 'add' - neither qualifier match nor bean name match!
网上找了好多的资料没能解决,后来发现:项目中使用的是xml配置的方式配置事务,但是
原文:http://stackoverflow.com/questions/15585602/change-limit-for-mysql-row-size-too-large
异常信息:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAM
/**
* 格式化时间 2013/6/13 by 半仙 [email protected]
* 需要 pad 函数
* 接收可用的时间值.
* 返回替换时间占位符后的字符串
*
* 时间占位符:年 Y 月 M 日 D 小时 h 分 m 秒 s 重复次数表示占位数
* 如 YYYY 4占4位 YY 占2位<p></p>
* MM DD hh mm
在使用下面的命令是可以通过--help来获取更多的信息1,查询当前目录文件列表:ls
ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息:
ls / 显示/.下的所有文件和目录
ls -l 给出文件或者文件夹的详细信息
ls -a 显示所有文件,包括隐藏文
Spring Tool Suite(简称STS)是基于Eclipse,专门针对Spring开发者提供大量的便捷功能的优秀开发工具。
在3.7.0版本主要做了如下的更新:
将eclipse版本更新至Eclipse Mars 4.5 GA
Spring Boot(JavaEE开发的颠覆者集大成者,推荐大家学习)的配置语言YAML编辑器的支持(包含自动提示,