Проблема строка с в Вашей структуре. Я нашел, что маршалинг типов как байт/закорачивать/интервал не является проблемой; но когда необходимо упорядочить в составной тип, такой как строка, Вам нужна Ваша структура для явной имитации неуправляемого типа. Можно сделать это с MarshalAs attrib.
Для Вашего примера, следующее должно работать:
[StructLayout(LayoutKind.Explicit)]
struct StructType
{
[FieldOffset(0)]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string FileDate;
[FieldOffset(8)]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string FileTime;
[FieldOffset(16)]
public int Id1;
[FieldOffset(20)]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 66)] //Or however long Id2 is.
public string Id2;
}
Вы можете попробовать
String[] params = new String[] {"jack", "25"};
Object[] realParams = new Object[params.length];
Method[] methods = getClass().getMethods();
for (Method method : methods) {
if (method.getParameterTypes().length == params.length) {
for (int i = 0; i < method.getParameterTypes().length; i ++) {
Class<?> paramClass = method.getParameterTypes()[i];
if (paramClass = String.class) {
realParams.add(param);
} else if (paramClass == Integer.class || paramClass == Integer.TYPE) {
realParams.add(Integer.parseInt(param));
} else if (other primitive wrappers) {
...
} else {
realParams.add(null); // can't create a random object based on just string
// you can have some object factory here, or use ObjectInputStream
}
}
break; // you can continue here if the parameters weren't converted successfully,
//to attempt another method with the same arguments count.
}
}
Похоже на метапрограммирование. Вы можете изучить Groovy / Scala, если вы настроены на платформу JVM.
Взгляните на API-интерфейсы отражения Java, они должны (хотя я точно не помню) быть в состоянии предоставить вам информацию, необходимую для определения различных типов параметров. Затем вам придется перебирать список и разумно приводить каждый из них на основе того, что API отражения сообщил вам о методе.
Для динамического программирования используйте язык динамического программирования. Java не очень подходит для такого рода вещей.
В любом случае посмотрите на API отражения, но если вы планируете много заниматься подобным программированием для своего приложения, рассмотрите другие альтернативы.