PostgreSQL function返回多行的操作
阿新 • • 發佈:2020-12-30
1、概念:
廣泛的型別。定義時不確定型別,在使用時來確定,該型別就是泛型。
2、使用泛型語法:
<泛型型別1,泛型型別2,…泛型型別n>
泛型型別:必須是引用型別,如果需要基本資料型別作為泛型,請使用包裝類。
3、程式碼示例
import java.util.ArrayList;
import java.util.List;
public class Demo6_泛型 {
public static void main(String[] args) {
/*List list = new ArrayList();
list.add("bbb");
list.add("abc");
list.add(123);
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
String s = (String) o;//需要向下型別轉換//java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
String substring = s.substring(1);
System.out.println(substring);//bb bc
}*/
//問題:
//1、如果使用元素中的特有方法,必須向下型別轉換。
//2、由於需要向下型別轉換,容易型別轉換異常問題。
//解決:使用泛型
//1、型別檢查,符合該型別的元素才能新增到集合中。
//2、由於型別檢查,所以元素型別必然確定,所以無需型別轉換。
List<String> list2 = new ArrayList<String>();
list2.add("bbb");
list2.add("abc" );
//list2.add(123);報錯,型別檢查
for (int i = 0; i < list2.size(); i++) {
String s = list2.get(i);
System.out.println(s.substring(1));
}
}
}
4、泛型類
(1)語法
訪問修飾符 class 類名<泛型字母1,泛型字母2,…>{
泛型型別的成員/其他型別的成員
}
泛型字母1,泛型字母2,…:一般都是大寫字母,表示該類定義時,泛型型別無法確定。類建立物件時決定。
(2)程式碼示例
import java.util.ArrayList;
import java.util.List;
//泛型類
class Source<T>{
private T data;
private int a;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
public class Demo6_泛型 {
public static void main(String[] args) {
//泛型類的泛型,在物件建立中才能確定,當泛型型別被確定,其泛型類中使用到泛型型別都確定了。
Source<String> s = new Source<String>();
//確定泛型型別技術:
//菱形技術
Source<String> s2 = new Source<>();
//擦除技術
Source<String> s3 = new Source();
s3.setData("巧克力");
String data = s3.getData();
System.out.println(data);
//注意:使用泛型類時,不去確定泛型的型別,泛型類的泛型的型別是Object型別。
Source s4 = new Source();
s4.setData(new Object());
}
}
(3)泛型類在API中體現
5、泛型方法
(1)語法
訪問修飾符 <泛型字母1,泛型字母2,…>返回值型別 方法名(引數列表){
方法體
}
泛型字母1,泛型字母2,…:一般都是大寫字母,該泛型型別由引數型別決定。
(2)程式碼示例
import java.util.ArrayList;
import java.util.List;
//泛型類
class Source<T> {
private T data;
private int a;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
//泛型方法
//泛型方法提出原因:該方法不希望使用泛型類的泛型。
//注意1:非靜態泛型方法的方法體和引數列表中可以使用泛型類的泛型
// 2:靜態泛型方法的方法體和引數列表中不可以使用泛型類的泛型。
public static <Q> Q method(Q q/*, T tb 報錯*/) {
//this.data = t; 報錯
return q;
}
}
public class Demo6_泛型 {
public static void main(String[] args) {
Source<String> s = new Source<>();
Integer method = s.method(10);
System.out.println(method);//10
}
}
(3)泛型方法在API中體現
6、泛型介面
(1)語法
訪問修飾符 interface 介面名<泛型字母1,泛型字母2,…>{
泛型型別成員(方法)
}
(2)程式碼示例
interface Inter<E>{
//介面泛型型別不能使用介面屬性中,介面屬性都是靜態的。
public E method();
}
//通過實現將泛型介面中泛型傳遞給實現類
class Impl<E> implements Inter<E>{
@Override
public E method() {
return null;
}
}
//通過繼承將泛型介面中泛型傳遞給子介面
interface subInter<E> extends Inter<E>{
public void function(E e);
}
public class Demo6_泛型 {
public static void main(String[] args) {
//泛型介面的作用:傳遞泛型
Impl<String> impl = new Impl<>();
String method = impl.method();
}
}
(3)泛型介面在API中體現
7、泛型萬用字元
(1)語法
(2)程式碼示例
public class Demo6_泛型 {
public static void foreach(List<?> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public static void main(String[] args) {
//泛型萬用字元
//需求:對老師集合,學生集合,人類集合進行遍歷並輸出每個元素資料。
List<Teacher> tlist = new ArrayList<>();
Teacher t1 = new Teacher("孔子", 1000L);
Teacher t2 = new Teacher("孟子", 2000L);
Teacher t3 = new Teacher("老子", 3000L);
tlist.add(t1);
tlist.add(t2);
tlist.add(t3);
List<Puple> plist = new ArrayList<>();
Puple p1 = new Puple("小明", 6);
Puple p2 = new Puple("小紅", 7);
Puple p3 = new Puple("小杰", 8);
plist.add(p1);
plist.add(p2);
plist.add(p3);
List<Person> perlist = new ArrayList<>();
Person per1 = new Person("路人甲");
Person per2 = new Person("路人乙");
Person per3 = new Person("路人丙");
perlist.add(per1);
perlist.add(per2);
perlist.add(per3);
foreach(tlist);
foreach(plist);
foreach(perlist);
}
}
8、泛型上下限
(1)概念:用於控制泛型萬用字元可以介面的泛型類型範圍。
(2)語法: