經過一連串資料處理後,可得到如下的介面,請問要如何將上述介面改為個別參數的介面呢?
請各位大神協助啊
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);
}
不知道你是不是誤會了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