文章目录
  1. 1. Tips
  2. 2. junit 使用
  3. 3. 泛型
  4. 4. 可变参数
  5. 5. for循环
  6. 6. 枚举
    1. 6.1. 枚举的扩展
  7. 7. 反射

Tips

1
2
3
// propoties 的快捷方法
ResourceBundle res = ResourceBundle.getBundle("db"); //文件名为 db.prop
res.getString("user")

.properties 不支持中文。使用jdk工具字符串转码工具

native2ascii

junit 使用

  1. 线程独立
  2. 测试方法
    1.public
    2.没有返回
    3.方法不能有参数
  3. 独立测试体,调用指定对象

类一般为Test结尾,如果类名没有以Test结尾,类继承TestCase类

泛型

1
2
val entrys = maps.entrySet();
entrys.iterator();
1
2
3
4
// T 不能是基本数据类型
public static <T> T print(T [] arr){
    
}

可变参数

1
2
3
public static int getSum(int... params) {

}

for循环

1
2
List<String> list = Arrays.asList(arr);
for (String str : list) println(str); // 实现的对象要实现 iterable 接口

枚举

1
2
3
4
enum Role {
    boss, manager, emp; //私有构造类
}
Role.values() //返回对象数组

枚举的扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
enum Week {
   Mon("星期一"){@Override public void getName(){}}, Tue("星期二");
   private String week;

   private Week(String week) {
       this.week = week;
   }
   // getWeek(); setWeek();
   
   public abstract void getName();
}

Week.Mon.name();
Week.Mon.ordinal(); //脚标,0

反射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Class clazz = Class.forName("");
Class clazz = ref.getClass();

// 字段
Object instance = clazz.newInstance();
Field field = clazz.getDeclaredField("field"); // or getField() 获取public的字段
field.setAccessible(true); // private 变为 public
field.set(instance, "list");

// 获取方法
Method m = clazz.getDeclaredMethod("print", String.class); //方法的名字和方法的参数
// or  clazz.getDeclaredMethod("print", null);
m.setAccessible(true); // private to public
m.invoke(instance, "parameters");

Constructor con = clazz.getConstructor(String.class, String.class);
con.newInstance("");

用scala实现的调用的java反射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package io.zhpooer.test

import org.scalatest.FlatSpec
import org.scalatest.matchers.ShouldMatchers
import scala.beans.BeanProperty

class Person {
  @BeanProperty var name: String = _
  @BeanProperty var age: Int = _
  override def toString = name + ", " + age 
}

class ReflectSpec extends FlatSpec with ShouldMatchers {
  it should "通过Java反射机制得到类的包名和类名" in {
    val p = new Person;
    println("包名字: " + p.getClass().getPackage().getName())
    println("类名: " + p.getClass().getSimpleName())
    println("完整类名: " + p.getClass().getName())
  }

  it should "通过Java反射机制,用 Class 创建类对" in {
    val clazz = Class.forName("io.zhpooer.test.Person")

    clazz.newInstance() match {
      case p: Person =>
        p.setAge(12)
        p.setName("lest")
        println(p)
    }
  }
  
  it should "通过Java反射机制,用 Field 设置属性" in {
    val clazz = Class.forName("io.zhpooer.test.Person")
    val p = new Person;
    p.setAge(12);
    p.setName("test")
    
    val field = clazz.getDeclaredField("name") 
    field.setAccessible(true)
    field.set(p, "change")
    println(field.get(p) +  " " + p)
  }
  
  it should "通过Java反射机制得到类的一些成员信息 方法等" in {
    val clazz = Class.forName("io.zhpooer.test.Person")

    for ( field <- clazz.getDeclaredFields()) {
      println(field.getModifiers() + " " + field.getName())
    }
    
    for ( method <- clazz.getDeclaredMethods()) {
      println(method.getModifiers() + " " + method.getReturnType() + " " + method.getName())
    }
  }
}
文章目录
  1. 1. Tips
  2. 2. junit 使用
  3. 3. 泛型
  4. 4. 可变参数
  5. 5. for循环
  6. 6. 枚举
    1. 6.1. 枚举的扩展
  7. 7. 反射