Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311

Рефлексия

03.11.2014, 16:05. Показов 1859. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть задача по заданному имени класса создать файл, с расширением .java, который по факту будет интерфейсом со всеми методами из класса, имя которого задается.
Допустим, я повытягивал через Reflection API методы и всю информацию о них(возврат, параметры, исключения) класса.
Как формировать файл интерфейса? Писать построчно вручную в файл для каждого метода?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2014, 16:05
Ответы с готовыми решениями:

Рефлексия
Есть скомпилированный класс Child, который реализует интерфейс Parent, в директории C://Users//1//Desktop. Как создать его в своей...

Рефлексия Java
Нужно чтобы по команде create вызывался метод по его имени, желательно через рефлексию а как не пойму Вот сам метод: public void...

Аннотация и рефлексия
Пытаюсь с помощью рефлексии и аннотаций вызвать метод класса с параметрами. Рефлексия при этом вызывает метод: @MethodInvocation ...

6
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
03.11.2014, 17:58
EdisonMiranda, вот поднакидал, но нужно доработать, там уже по вкусу, но думаю принцип понятен

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.LinkedList;
import java.util.List;
 
/**
 * Created by Yoghurt_92 on 03.11.14.
 */
 
 
public class Test {
 
    public static void writeToFile(List<String> list, String file) {
 
        try(FileWriter fileWriter = new FileWriter(file + ".java")) {
 
            list.forEach(value -> {
                try {
                    fileWriter.write(value + "\r\n");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
 
        } catch(IOException exc) { exc.printStackTrace(); }
    }
 
    public static void nameClass(List<String> list, Class c) {
 
        String name = "";
 
        int mods = c.getModifiers();
        if (Modifier.isPublic(mods)) {
            name += "public ";
        }
        if (Modifier.isAbstract(mods)) {
            name += "abstract ";
        }
        if (Modifier.isFinal(mods)) {
            name += "final ";
        }
 
        name += c.getSimpleName();
 
        String superName;
        if ((superName = c.getSuperclass().getSimpleName()) != null)
            name += (" extends " + superName);
 
        Class[] interfaces = c.getInterfaces();
        if (interfaces != null) {
            name += " implements ";
 
            for (int i = 0; i < interfaces.length; ++i) {
                name += interfaces[i].getSimpleName();
                if (i < interfaces.length - 2) name += ", ";
                else if (i != interfaces.length - 1) name += " ";
            }
        }
 
        list.add(name);
        list.add("\n");
    }
 
    public static void fieldsClass(List<String> list, Class c) {
 
        Field[] publicFields = c.getFields();
        for (Field field : publicFields) {
            Class fieldType = field.getType();
            list.add(fieldType.getSimpleName() + " " + field.getName());
        }
 
        list.add("\n");
    }
 
    public static void constructorsClass(List<String> list, Class c) {
 
        Constructor[] constructors = c.getConstructors();
        for (Constructor constructor : constructors) {
 
            String value = "";
            int _mods = constructor.getModifiers();
            if (Modifier.isPublic(_mods)) {
                value += "public ";
            }
            else if (Modifier.isPrivate(_mods)) {
                value+= "private ";
            }
 
            value += (c.getSimpleName() + "(");
            Class[] paramTypes = constructor.getParameterTypes();
            for (int i = 0; i < paramTypes.length; ++i) {
                value += paramTypes[i].getSimpleName();
                if (i < paramTypes.length - 2) value+= ", ";
                else if (i != paramTypes.length - 1) value += " ";
            }
            value+= ")";
            list.add(value);
        }
 
        list.add("\n");
    }
 
    public static void methodsClass(List<String> list, Class c) {
        Method[] methods = c.getMethods();
        for (Method method : methods) {
 
            String value = "";
            int mods = method.getModifiers();
            if (Modifier.isPublic(mods)) {
                value += "public ";
            }
            if (Modifier.isAbstract(mods)) {
                value += "abstract ";
            }
            if (Modifier.isFinal(mods)) {
                value += "final ";
            }
            if (Modifier.isStatic(mods)) {
                value += "static ";
            }
 
            value += method.getReturnType().getSimpleName();
            value += (" " + method.getName());
 
            Class[] paramTypes = method.getParameterTypes();
            value += "(";
            for (int i = 0; i < paramTypes.length; ++i) {
                value += paramTypes[i].getSimpleName();
                if (i < paramTypes.length - 2) value += ", ";
                else if (i != paramTypes.length - 1) value += " ";
            }
            value += ")";
            list.add(value);
        }
    }
 
    public static void main(String... args) {
 
        Class c = Integer.class;
        List<String> list = new LinkedList<>();
 
        nameClass(list, c);
        fieldsClass(list, c);
        constructorsClass(list, c);
        methodsClass(list, c);
        writeToFile(list, c.getSimpleName());
    }
}
1
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311
03.11.2014, 18:38  [ТС]
Yoghurt_92, то вы аж чересчур.

Добавлено через 10 минут

Не по теме:

интересно получается иногда:
кто-то просит решить за него задачу, дак ему или подскажут слегонца, или вообще отправят нах в гугл
а кто-то только что-то уточняет маленькое, а ему такую простыню вываливают :D

0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
03.11.2014, 19:10
EdisonMiranda, тут много чего еще можно доработать, я просто показал пример. Код не велик.
0
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311
04.11.2014, 18:52  [ТС]
столкнулся со следующим:
короче по заданному классу делаю интерфейс,
выглядит мой созданный файл так(для java.util.List):

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public interface ListInterface {
 
int hashCode();
 
boolean equals(Object x1);
 
void add(int x1, Object x2);
 
boolean add(Object x1);
 
boolean contains(Object x1);
 
Object get(int x1);
 
int indexOf(Object x1);
 
boolean isEmpty();
 
int lastIndexOf(Object x1);
 
int size();
 
List subList(int x1, int x2);
 
Object[] toArray();
 
Object[] toArray(Object[] x1);
 
boolean addAll(int x1, Collection x2);
 
boolean addAll(Collection x1);
 
Iterator iterator();
 
Object remove(int x1);
 
boolean remove(Object x1);
 
void clear();
 
Object set(int x1, Object x2);
 
boolean containsAll(Collection x1);
 
ListIterator listIterator();
 
ListIterator listIterator(int x1);
 
boolean removeAll(Collection x1);
 
boolean retainAll(Collection x1);
 
}
Теперь в идеале чтобы он компилировался
но проблема в том что если методы в интерфейсе возвращают Collection, или List или еще что-то, то нужен
вначале импорт чтобы скомпилировать этот .java файл

Я пробовал в возвращаемых типах и аргументах сделать полное имя
Collection --> java.util.Collection
List --> java.util.List
String --> java.util.String

но тогда проблема в том, что для массивов получается ерунда
Object[] --> [Ljava.lang.Object;

Как такое решить?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
04.11.2014, 19:01
EdisonMiranda, преобразовать [Ljava.lang.Object к Object[]
0
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311
04.11.2014, 19:19  [ТС]
turbanoff,

Не по теме:

капитан :rofl:


не, на самом деле все решилось через вывод имени класса методом getCanonicalName()
Цитата Сообщение от turbanoff Посмотреть сообщение
[Ljava.lang.Object
а то я брал getName()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2014, 19:19
Помогаю со студенческими работами здесь

Аннотации и Рефлексия
Парни, подскажите что не так я делаю. У меня кидает исключение java.lang.IllegalArgumentException: wrong number of arguments ...

Java рефлексия
Как создать обьект, если есть файл типа .class? Или как создать обьект класса Class с помощью этого файла, для дальнейшей работы с обьектом?

Рефлексия, ProccessBuild, библиотеки, classpath
Ку-кушки, ребзя, есть такой вопросик. int memory = 2048; ArrayList&lt;String&gt; params = new ArrayList&lt;String&gt;(); ...

Рефлексия: получить значение поля объекта
создаю объект класса Monitor; как через рефлексию получить значение поля price? public class ReflectionExample { public static...

Рефлексия методов с неизвестным массивом параметров
Здравствуйте! Подскажите, как мне передать параметры в getMethod, для выполнения этого метода через invoke, если входящие параметры заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru