iT邦幫忙

0

Java interface 之問題

經過一連串資料處理後,可得到如下的介面,請問要如何將上述介面改為個別參數的介面呢?
請各位大神協助啊

public interface DataStatus {

void DataIsLoad(List<... > A1,List<... > A2,...List<...>An);

}

個別參數介面如下:

public interface DataStatus1 {

void DataIsLoad(List<... > A1);

}

public interface DataStatus2 {

void DataIsLoad(List<... > A2);

}

.....

public interface DataStatusn {

void DataIsLoad(List<... > An);

}

fillano iT邦超人 1 級 ‧ 2020-07-20 09:07:45 檢舉
List<List<...>> A 這樣?
fnsne iT邦新手 5 級 ‧ 2020-07-20 10:17:19 檢舉
我有一陣子沒寫java了,不過DataStatus1~n 看起來都是同一個function,這樣應該都是同一個interface吧?
fillano iT邦超人 1 級 ‧ 2020-07-21 09:07:20 檢舉
n個List<...>參數,不就是List<List<...>>嗎?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
喵凹咿唉思嗯
iT邦研究生 5 級 ‧ 2020-07-23 12:26:51

不知道你是不是誤會了interface, 從你的描述上看不太出來你實際上想做什麼, 如果A1~An的List內的型別都是相同的, 那麼其實A1~An的interface跟fnsne說的一樣, 應該都是屬於同一個interface才對

如果你是不確定n的數量, 或是想動態取得第i個參數, 針對第i個去做處理, 可以參考看看java8之後的可變長度參數以及動態呼叫method的方法

interface

import java.util.List;

public interface DataIsLoad {
    void dataIsLoad(List<String>... a );
}

測試程式, interface是拿來implement的, 等於強迫所有實作的class有相同的介面(method)

import org.junit.jupiter.api.Test;

import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;

public class DataIsLoadTest implements DataIsLoad{
    @Override
    public void dataIsLoad(List<String>... A) {

        System.out.println("這是原始input .. 變數總數: " + A.length);
        Arrays.stream(A).forEach(System.out::println);

        for( int i=1; i<= A.length; i++ ){
            String methodName = "dataIsLoad" + String.valueOf(i);
            try {
                this.getClass().getMethod(methodName , new Class[]{List.class}).invoke(this, new Object[]{A[i-1]});
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                System.out.println("不存在的Method: " + methodName );
            }
        }
    }

    public void dataIsLoad1(List<String> A1){
        System.out.println("A1: "+A1.toString());
    }
    public void dataIsLoad2(List<String> A2){
        System.out.println("A2: "+A2.toString());
    }

    @Test
    void testDataIsLoad() {
        dataIsLoad(List.of("A1", "A2"), List.of("B1","B2"), List.of("C1", "C2"));
    }
}

產出

這是原始input .. 變數總數: 3
[A1, A2]
[B1, B2]
[C1, C2]
A1: [A1, A2]
A2: [B1, B2]
不存在的Method: dataIsLoad3

我要發表回答

立即登入回答