опять про reflection
От: aios  
Дата: 14.11.18 16:54
Оценка:
с динамическим созданием класса разобрался. в связи с чем возникло еще пара вопросов:

1) допустим следующий класс создан через рефлексию:

public class C<T>
{
    public void foo(T param)
    {
        ......
    }
}


как инстансировать и работать с этим классом скажем для T = String. в инете че-то внятного ничего нет...
в принципе я не побрезгую строковыми операциями по замене перед компиляцией, но все же?

2) допустим я создал рефлексией класс из пункта 1. можно ли как-то динамически туда добавлять методы и поля?

блин. после .net как руки отрубили.... (при этом это там требовалось ну крайне редко....)
Re: опять про reflection
От: · Великобритания  
Дата: 14.11.18 16:59
Оценка:
Здравствуйте, aios, Вы писали:

A>с динамическим созданием класса разобрался. в связи с чем возникло еще пара вопросов:


A>1) допустим следующий класс создан через рефлексию:

Класс создаётся не через рефлексию, а через кодогенерацию...

A>как инстансировать и работать с этим классом скажем для T = String. в инете че-то внятного ничего нет...

type erasure, в рантайме типов у генериков нет. Кодогенерировать с генериками смысла по-моему вообще нет.. Генери просто
public class C
{
    public void foo(Object param)
}

Эффект тот же.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: опять про reflection
От: aios  
Дата: 14.11.18 17:59
Оценка:
A>>1) допустим следующий класс создан через рефлексию:
·>Класс создаётся не через рефлексию, а через кодогенерацию...

ну да. согласен. но работаю я потом с ним через рефлексию.

A>>как инстансировать и работать с этим классом скажем для T = String. в инете че-то внятного ничего нет...

·>type erasure, в рантайме типов у генериков нет. Кодогенерировать с генериками смысла по-моему вообще нет.. Генери просто
·>
·>public class C
·>{
·>    public void foo(Object param)
·>}
·>

·>Эффект тот же.

да не подходит мне этот эффект. фишка в том, что я даже как зваться класс не знаю. знаю что там будет набор атрибутов (в зависимости от настроек отчета). кроме того неограниченная вложенность блоков, куда опять-таки входят всякие атрибуты и блоки и т.д. вложенность в общем случае любая и все это надо скормить библиотеке для формирования файла эксел по шаблону. в общем фиг знает как без динамики выкрутиться.
Re[3]: опять про reflection
От: · Великобритания  
Дата: 14.11.18 18:19
Оценка: +3
Здравствуйте, aios, Вы писали:

A>·>Эффект тот же.

A>да не подходит мне этот эффект. фишка в том, что я даже как зваться класс не знаю. знаю что там будет набор атрибутов (в зависимости от настроек отчета). кроме того неограниченная вложенность блоков, куда опять-таки входят всякие атрибуты и блоки и т.д. вложенность в общем случае любая и все это надо скормить библиотеке для формирования файла эксел по шаблону. в общем фиг знает как без динамики выкрутиться.
Не понял. Вопрос в том — накой тебе генерить класс с генериками?

Да и вообще по-моему ты что-то не то делаешь. Не надо классы генерить, а положить всё в Map<String,Value> и заставить jxls это использовать.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: опять про reflection
От: vsb Казахстан  
Дата: 14.11.18 18:35
Оценка:
Здравствуйте, aios, Вы писали:

A>с динамическим созданием класса разобрался. в связи с чем возникло еще пара вопросов:


A>1) допустим следующий класс создан через рефлексию:


A>
A>public class C<T>
A>{
A>    public void foo(T param)
A>    {
A>        ......
A>    }
A>}
A>


A>как инстансировать и работать с этим классом скажем для T = String. в инете че-то внятного ничего нет...


В рантайме T убирается. Поэтому в создании объекта оно никак не используется. C.class.newInstance() — так создаётся.

A>2) допустим я создал рефлексией класс из пункта 1. можно ли как-то динамически туда добавлять методы и поля?


Нельзя.
Re[4]: опять про reflection
От: aios  
Дата: 14.11.18 18:48
Оценка:
·>Да и вообще по-моему ты что-то не то делаешь. Не надо классы генерить, а положить всё в Map<String,Value> и заставить jxls это использовать.


·>Да и вообще по-моему ты что-то не то делаешь. Не надо классы генерить, а положить всё в Map<String,Value> и заставить jxls это использовать.


может и не то. ну вот пример иллюстрирующий немного проблему:

class root //  это не синтаксис явы, но хз как еще пояснить
{
    A1 attr1;
    A2 attr2;
    .....
    AN attrN;
    
    List <Block0> block0;
    List <Block1> block1;
    .......
    List <BlockN> blockN; 
}

class Block0
{
    B1 attr1;
    B2 attr2;
    .....
    BN attrN;

    List <BlockN+1> block0;
    List <BlockN+2> block1;
    .......
    List <BlockN+k> blockNк; 
}
......
и т.д.


вложенность потенциально любая, на практике — 2.
но пользователи хотят больше.

и все это хочу скормить библиотеке. убедился — вложенность поддерживает хорошо.
пока кроме динамической генерации ничего в голову не приходит.

п.с. яву знаю на уровне "знаю C#"

п.п.с. по уму, надо бы переписывать их систему составления sql запросов. но блин там такой лес.... и чуть ошибусь — рухнет вообще все начать с того, что шапка документа — один запрос, а вот табличная часть — делается кучей подзапросов с фильтрацией по элементу шапки (ну и уровень вложенности не один, и там тоже подзапросы). в общем я не знаю как там пользователи с этим работают — отчеты ждут часами и это нормальным считается
здесь бы по идее и надо переделывать в первую очередь. но по слухам эта система в ближайшее время (год-два) подохнет. поэтому нужно быстрое решение.
Re[5]: опять про reflection
От: · Великобритания  
Дата: 14.11.18 19:02
Оценка:
Здравствуйте, aios, Вы писали:

A> List <Block0> block0;

В третий раз повторюсь — Генери просто List block0 и не мучайся с генериками.

A>вложенность потенциально любая, на практике — 2.

A>но пользователи хотят больше.
В теории вложенность может быть и бесконечной:
class Node
{
 List<Node> children;
}


A>и все это хочу скормить библиотеке. убедился — вложенность поддерживает хорошо.

A>пока кроме динамической генерации ничего в голову не приходит.
А чем предложение с Map не устраивает?

A>п.с. яву знаю на уровне "знаю C#"

Да всё то же что и в C#, только со всякими генериками бороться не надо.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: опять про reflection
От: aios  
Дата: 14.11.18 19:27
Оценка:
A>>п.с. яву знаю на уровне "знаю C#"
·>Да всё то же что и в C#, только со всякими генериками бороться не надо.

мап в моем понимании — словарь. как его будет жрать библиотека?
Re[7]: опять про reflection
От: vsb Казахстан  
Дата: 14.11.18 19:34
Оценка:
Здравствуйте, aios, Вы писали:


A>>>п.с. яву знаю на уровне "знаю C#"

A>·>Да всё то же что и в C#, только со всякими генериками бороться не надо.

A>мап в моем понимании — словарь. как его будет жрать библиотека?


Любая приличная библиотека позволяет использовать Map вместо объекта.

Map<String, Object> person = new HashMap<>();
person.put("firstName", "John");
person.put("age", 21);
Map<String, Object> company = new HashMap<>();
company.put("name", "Horns");
company.put("owner", person);


Думаю, jxls не исключение. Просто используй Map<String, Object> вместо тех объектов, которые ты пытаешься генерировать, клади в них какие душе угодно свойства и значения любой вложенности и всё.
Отредактировано 14.11.2018 19:36 vsb . Предыдущая версия .
Re[4]: опять про reflection
От: bzig  
Дата: 15.11.18 14:31
Оценка:
·>Не понял. Вопрос в том — накой тебе генерить класс с генериками?

Следующим вопросом будет "как перехватывать обращения к несуществующим свойствам и подкладывать свой ответ (как в Руби)" — и на этом разработку своего Map с генериками и шлюхами можно будет считать законченным
Re[8]: опять про reflection
От: bzig  
Дата: 15.11.18 14:35
Оценка:
vsb>Думаю, jxls не исключение. Просто используй Map<String, Object> вместо тех объектов, которые ты пытаешься генерировать, клади в них какие душе угодно свойства и значения любой вложенности и всё.

Разобрали в соседнем топике. Там даже можно подсунуть SpEL как язык выражений, а он позволяет к мэпу обращаться через точку map.fullName вместо map["fullName"], но чуваку обязательно надо гланды ректально удалить.
Re[5]: опять про reflection
От: aios  
Дата: 15.11.18 15:39
Оценка:
B>Следующим вопросом будет "как перехватывать обращения к несуществующим свойствам и подкладывать свой ответ (как в Руби)" — и на этом разработку своего Map с генериками и шлюхами можно будет считать законченным

погуглил про мапы в связке с этой библиотекой. ненагуглилось ничего. повторюсь полный нуб я по яве. ни одной книжки не прочитал даже базы. чисто на "схожести" с шарпом орудую (блин в стринге нету инсерт даже — изврат через конкатенацию — я хренею на этот язык... да, да, про StringBuilder знаю, просто к слову)
Re[6]: опять про reflection
От: · Великобритания  
Дата: 15.11.18 15:57
Оценка:
Здравствуйте, aios, Вы писали:

B>>Следующим вопросом будет "как перехватывать обращения к несуществующим свойствам и подкладывать свой ответ (как в Руби)" — и на этом разработку своего Map с генериками и шлюхами можно будет считать законченным

A>погуглил про мапы в связке с этой библиотекой. ненагуглилось ничего.
Ну вот нагуглилось:

The created List<Map<String, Object>> is then processed by jx:each command in a regular way.

или тут.

Map elements are accessed using square brackets, e.g.

Открой исходники либы, в конце концов, если уж доки недостаточно понятны.

A>повторюсь полный нуб я по яве. ни одной книжки не прочитал даже базы.

Да я тоже ни одной книжки не прочитал. Но вспомни, что c# делался как калька с java — какая разница-то?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.