泛型參數java
Ⅰ java 泛型方法的入參參數如:id,如何id限制為String或者Number
首先,你要理解為什麼使用集合框架:如果並不知道程序運行時會需要多少對象,或者需要更復雜方式存儲對象—可以使用java集合框架。
其次,稍微理解一下泛型的機制:將對象的類型作為參數,指定到其它類或者方法上,從而保證類型轉換的安全性和穩定性;本質是參數化類型;創建的集合只能存放<>中寫的類型元素,不能存放別的類型的元素,因此取出元素時也就不需要強轉了;泛型中不能存放基本數據類型等。
通俗的說,就是保證存入集合中的數據的安全性,例如,本來集合中可以存儲各種數據類型的數據有int,string,char等等,只是存進去之後就自動變成Object類型的啦。現在用泛型的話,就是一種約束,即只能存放我們規定的數據類型的元素,如:
ArrayList<String> students = new ArrayList<String>();
現在在集合中只能存放String類型的參數了,此時你要傳入的參數id就只能是String類型的啦。
ArrayList<Student>students = new ArrayList<Student>();
現在在集合中只能存放Studeng類型的參數了,存放其他數據類型時,就會出錯,所以說保證了數據的安全性。
基本就這么多啦,可以多交流,相互幫助,希望可以幫到你呀!!!
Ⅱ 如何獲取java泛型的參數類型
一般可以使用反射來獲取泛型參數的實際類型,以下是詳細代碼:
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
public class GenericTest {
/*使用反射來獲取泛型信息*/
private Map<String, Integer> score;
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
//Class clazz = GenericTest.class;
Class<GenericTest> clazz = GenericTest.class;
//System.out.println(clazz);
Field f = clazz.getDeclaredField("score");
//直接使用getType只對普通類型有效,無法取到泛型參數
Class<?> a = f.getType();
System.out.println("score的類型是:"+a);
//獲得Field實例f的泛型類型
Type gType = f.getGenericType();
//如果gType類型是ParameterizedType的對象
if (gType instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) gType;
//獲取原始類型
Type rType = pType.getRawType();
System.out.println("原始類型是:"+rType);
//取得泛型類型參數
Type[] tArgs = pType.getActualTypeArguments();
System.out.println("泛型類型是:");
for (int i = 0; i < tArgs.length; i++) {
System.out.println("第"+i+"個泛型類型是:"+tArgs[i]);
}
}else{
System.out.println("獲取泛型類型出錯!");
}
}
}
輸出結果如下:
score的類型是:interface java.util.Map
原始類型是:interface java.util.Map
泛型類型是:
第0個泛型類型是:class java.lang.String
第1個泛型類型是:class java.lang.Integer
Ⅲ java中泛型的使用
泛型可以避免強制類型轉換,設定集合對象中存儲的對象類型。
比如List<String> list = new ArrayList<String>();
那在這個list中,只能存儲字元串對象。
Ⅳ java怎麼傳遞泛型參數
packagetest;
importjava.util.ArrayList;
importjava.util.List;
publicclassNodeextendsIModel{
publicstaticvoidmain(String[]args)throwsInstantiationException,IllegalAccessException{
System.out.println(newNode().<Node>test(Node.class));
}
public<TextendsIModel>List<T>test(Class<T>clazz)throwsInstantiationException,IllegalAccessException{
List<T>list=newArrayList<T>();
脊塌告衫哪Tobj=clazz.newInstance();
櫻明list.add(obj);
System.out.println(list.get(0).getClass());
returnlist;
}
}
classIModel{
}
output:
classtest.Node
[test.Node@1fb8ee3]
Ⅳ JAVA中的泛型用法一種: <T> 返回值用法。
1、對於泛型方法來說,是可以接收不同類型的參數,比如下圖,使用泛型來操作List集合,然後向List中添加一條數據,看是否可以添加成功,創建泛型方法如圖所示。
Ⅵ java中如何得到泛型參數的class
泛型的目的就是為了避免強制類型轉換,所以直接取出來就是object的類型了。
public
class
classtest
{
public
static
void
main(string[]
args)
{
list
liststr
=
new
arraylist
();
liststr.add("aaa");
liststr.add("bbb");
system.out.println(liststr.get(0));
}
}
你想要的應該是這個吧,只要取出來就是你定義類型的object了,在這個例子中是string。如果你給它定義的是integer類型的泛型的話,取出來就是integer了。
Ⅶ java中如何得到泛型參數的class
泛型的類型是無法在運行時通過反射取燃唯困得的,泛型類型在編皮念譯成位元組碼的時候已經被虛擬機給去掉了,只是起到提示編譯山沒器進行類型檢查的作用
用這種方法你試一試:父類:import java.lang.reflect.ParameterizedType;
public class Parent<T {
public Parent() {
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
System.out.println("type==" + type);
System.out.println("entityClass==" + type.getActualTypeArguments()[0]);
System.out.println("getOwnerType==" + type.getOwnerType());
System.out.println("getRawType==" + type.getRawType());}}子類:public class Child<T extends Parent<String {