getClass () .getMethod (“имя”, неизвестное)

Проблема строка с в Вашей структуре. Я нашел, что маршалинг типов как байт/закорачивать/интервал не является проблемой; но когда необходимо упорядочить в составной тип, такой как строка, Вам нужна Ваша структура для явной имитации неуправляемого типа. Можно сделать это с 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;
}
5
задан Cœur 31 August 2017 в 16:41
поделиться

4 ответа

Вы можете попробовать


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.
  }
}
2
ответ дан 15 December 2019 в 06:29
поделиться

Похоже на метапрограммирование. Вы можете изучить Groovy / Scala, если вы настроены на платформу JVM.

1
ответ дан 15 December 2019 в 06:29
поделиться

Взгляните на API-интерфейсы отражения Java, они должны (хотя я точно не помню) быть в состоянии предоставить вам информацию, необходимую для определения различных типов параметров. Затем вам придется перебирать список и разумно приводить каждый из них на основе того, что API отражения сообщил вам о методе.

0
ответ дан 15 December 2019 в 06:29
поделиться

Для динамического программирования используйте язык динамического программирования. Java не очень подходит для такого рода вещей.

В любом случае посмотрите на API отражения, но если вы планируете много заниматься подобным программированием для своего приложения, рассмотрите другие альтернативы.

0
ответ дан 15 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: