1. 程式人生 > 資料庫 >PostgreSQL function返回多行的操作

PostgreSQL function返回多行的操作

技術標籤:Java SEjava泛型

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)語法:

<? super 類名> 下限,該類及其父類的泛型都能接收。 <? extends 型別> 上限,該類及其子類的泛型都能接收。 (3)程式碼示例 ```java public class Demo6_泛型 { public static void foreach(List<? super Teacher> list) { for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } public static void main(String[] args) { //泛型上下限 //需求2:對老師集合,人類集合進行遍歷並輸出每個元素資料。 //使用下限 <? super Teacher> //使用上限 <? extends Person> List 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 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 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); } } ``` (4)泛型萬用字元和泛型上下限在API中的體現 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/202101072057428.png)