JAvaベース補強+列挙+可変パラメータ+反射+内省
Enum 1.publicの構造方法があってはならず,外部呼び出し者のインスタンス化に用心する.2.列挙値用、区切り
3.Public static final 4.各列挙値はtoString()を上書きすることができる5.すべての列挙はjava.lang.Enumのサブクラスである6.各列挙値は、その存在する列挙タイプのインスタンス(部分と全体の関係ではない)と見なすことができる7.(高度)列挙を使用することは、単列モードを実現するための最適化方法である.
実行結果は
可変パラメータ:定義:パラメータの個数は可変です.作用:リロード方法の個数を減らす注意:1.各メソッドには可変タイプが1つしかなく、最後のパラメータとしてのみ使用できます.
実行結果:
反射:実行フェーズで、オブジェクトのプロパティ、メソッド、タイプを動的に取得するメカニズム.reflect Class Field-----クラス内の変数Method-----クラス内のメソッドを表します
内省:Introspector------BeanInfo------PropertyDescriptor------属性の名前、タイプなど
実行結果:
その中でEmployee.classはjavabeanです.ここでは省略します.
beansのプロパティとsetterメソッドを取得し、setterメソッドを呼び出します.
3.Public static final 4.各列挙値はtoString()を上書きすることができる5.すべての列挙はjava.lang.Enumのサブクラスである6.各列挙値は、その存在する列挙タイプのインスタンス(部分と全体の関係ではない)と見なすことができる7.(高度)列挙を使用することは、単列モードを実現するための最適化方法である.
package com.itcast;
public class EnumHomeTest {
enum Director {
east{
public String toString(){
return "you choose the east";
}
},
south,
north,
west;
private void Director(){
}
public void test(String str){
System.out.println(" "+str);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Director[] dirs=Director.values();
// for
for(Director dir:dirs){
System.out.print(dir.ordinal()+"\t");
System.out.print(dir.name()+"\t");
System.out.println(dir);
}
//
System.out.println(Director.valueOf(Director.east.name()));
//
Director.south.test("wangjie");
}
}
実行結果は
0 east you choose the east
1 south south
2 north north
3 west west
you choose the east
wangjie
可変パラメータ:定義:パラメータの個数は可変です.作用:リロード方法の個数を減らす注意:1.各メソッドには可変タイプが1つしかなく、最後のパラメータとしてのみ使用できます.
package com.itcast;
public class Person {
public static void eat( String name,String... strings){
{
System.out.println(strings.length);
System.out.print(name);
for(String str:strings){
System.out.print("\t"+str);
}
System.out.println();
}
}
public static void main(String[] args) {
Person.eat("suhaiming");
Person.eat("Hutao", "rice");
Person.eat("lining", "rice","wheat");
Person.eat("lining", "rice","wheat","water");
}
}
実行結果:
0
suhaiming
1
Hutao rice
2
lining rice wheat
3
lining rice wheat water
反射:実行フェーズで、オブジェクトのプロパティ、メソッド、タイプを動的に取得するメカニズム.reflect Class Field-----クラス内の変数Method-----クラス内のメソッドを表します
package com.itcast.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
public static void getEmployeeAllFieldNames(){
Employee employee = new Employee();
//get all the fields in the Employee ,
Field[]fields = employee.getClass().getDeclaredFields();
for(Field field:fields){
//employee(object)-----Employee(class)-----Field[]--------field name
String fieldName = field.getName();
System.out.println("\t"+fieldName);
}
// , 。
Class tempClass = employee.getClass();
do{
Field[]superClassFields = tempClass.getDeclaredFields();
for(Field field:superClassFields){
//employee(object)-----Employee(class)-----Field[]--------field name
String fieldName = field.getName();
System.out.println("\t"+fieldName);
}
tempClass = tempClass.getSuperclass();
}while(tempClass != null);
}
public static void getEmployeeAllMethods(){
//
Method[]methods = Employee.class.getDeclaredMethods();
for(Method method:methods){
System.out.println("\t"+method.getName());
}
}
//
public static String getClassName(Object obj){
Class clazz = obj.getClass();
return clazz.getName();
}
/**
* @param args
*/
public static void main(String[] args) {
String str = "";
System.out.println(getClassName(str));
//getEmployeeAllFieldNames();
//getEmployeeAllMethods();
}
}
内省:Introspector------BeanInfo------PropertyDescriptor------属性の名前、タイプなど
package com.itcast.reflect;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
public class IntrospectTest {
public static void getAllPropertyName(){
//Introspector ----BeanInfo-----PropertyDescriptor-------property name
try {
BeanInfo beanInfo = Introspector.getBeanInfo(Employee.class);
PropertyDescriptor[]propertyDesccriptors = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor propertyDescriptor:propertyDesccriptors){
System.out.print(propertyDescriptor.getName()+"\t");
System.out.println(propertyDescriptor.getPropertyType()+"\t");
System.out.println(propertyDescriptor.getReadMethod());
}
} catch (IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
getAllPropertyName();
}
}
実行結果:
name class java.lang.String
public java.lang.String com.itcast.reflect.Employee.getName()
salary class java.lang.Float
public java.lang.Float com.itcast.reflect.Employee.getSalary()
その中でEmployee.classはjavabeanです.ここでは省略します.
beansのプロパティとsetterメソッドを取得し、setterメソッドを呼び出します.
PropertyDescripter[] ps = Introspector.getBeanInfo(xx.getClass()).getPropertyDescriptors();//
for(PropertyDescriptor properdesc : ps){
String propertyName = propertydesc.getName();//
Method setter = propertydesc.getWriterMethod();// setter
// String , beans String , , commons-beanutils
// xxxx 。
Object value = ConvertUtils.convert("xxxx",properdesc.getPropertyType());
setter.invoke(bean,value);//
}