add 泛型