powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Динам.создание переменной класса и заполнение полей
8 сообщений из 8, страница 1 из 1
Динам.создание переменной класса и заполнение полей
    #38482745
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Имею заполнение полей класса в Hibernate
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
     SessionFactory factory = config.buildSessionFactory(); 
     Session session = factory.getCurrentSession();
     session.beginTransaction();
     Kind kind0 = new Kind();
     kind0.setKind("00390");
     kind0.setNaim("Кредитные операции");
     session.saveOrUpdate(kind0);

     Pind pind0 = new Pind();
     pind0.setPind(100);
     pind0.setNaim("Автомобили");
     pind0.setType("Грузовые");
     session.saveOrUpdate(pind0);



Хотелось бы иметь некую универсальную процедуру, которая заполнила бы из текстовика
различный набор полей для разных классов (т.е Kind и Pind)

Можно ли реализовать динамическое объявление переменной класса и чтение его полей по аннотациям Hibernate


Kind record = new Kind();
или
Pind record = new Pind();


В цикле анализирует listMapping (DAY=1;KIND=2 /1,2- номер столбца в текстовике и массиве)
record.Field(FieldName) = lineStr[0];

FieldName - это из аннотации Hibernate @Column=DAY



Заранее благодарен !

Код: 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.
import java.io.File;
import org.hibernate.Session;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ExportData {
	private Session session;
	private String fileName;
	private Class  className;
	private String listMapping;
	private char   delimited;
	
	public ExportData(Session session, String fileName,Class className,String listMapping,char delimited,boolean execute) {
		setSession(session);
		setFileName(fileName);
		setClassName(className);
		setListMapping(listMapping);
		setDelimited(delimited);
		if(execute){
			ExecuteExport();
			}
		}
	
	public void ExecuteExport(){
		System.out.println("Export");
		if(session!=null && fileName!=null && delimited!='0'){
			Scanner readFile = null;
			try{
				readFile = new Scanner(new File(fileName));
				} catch (FileNotFoundException except) {
					except.printStackTrace();
					}
			while(readFile.hasNext()){
				String[] lineStr = readFile.nextLine().split(String.valueOf(delimited));
				Kind record   = new Kind();
				record.setKind(lineStr[0]);
				record.setNaim(lineStr[1]);
				record.setTime(Integer.parseInt(lineStr[2]));
				session.saveOrUpdate(record);
				}
			}
	}
	
   Getter+Setter процедуры	
}
...
Рейтинг: 0 / 0
Динам.создание переменной класса и заполнение полей
    #38483036
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое что-нибудь заюзать
http://opencsv.sourceforge.net/
...
Рейтинг: 0 / 0
Динам.создание переменной класса и заполнение полей
    #38484116
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо за диалог, по статье не нашел ПРЯМОГО ответа на вопрос

Как реализовать динам. обьявление класса
Код: java
1.
Kind record   = new Kind();



Это вообще возможно в Jave ?

Взять абстрактный указатель объект и привести к заданному параметров функции классу ?
public ExportData(Class className) {
Class record = new Class();

}

типа такого .....
...
Рейтинг: 0 / 0
Динам.создание переменной класса и заполнение полей
    #38484188
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XBlazkowicz,

Спасибо за диалог, по статье не нашел ПРЯМОГО ответа на вопрос

Как реализовать динам. обьявление класса
Код: java
1.
Kind record   = new Kind();



Это вообще возможно в Jave ?

Взять абстрактный указатель объект и привести к заданному параметров функции классу ?
public ExportData(Class className) {
Class record = new Class();

}

типа такого .....

если я правильно понял

если String className
Код: java
1.
Class.forName(className).newInstance(); 


если все-таки Class _class
Код: java
1.
_class.newInstance()



А если по сабжу, почитайте по про jaxb
...
Рейтинг: 0 / 0
Динам.создание переменной класса и заполнение полей
    #38484306
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Динам.создание переменной класса и заполнение полей
    #38484926
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо за ссылку - работаю
...
Рейтинг: 0 / 0
Динам.создание переменной класса и заполнение полей
    #38486474
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа а передать и привести к типу параметр сетера ? (тип неизвестен )

Пример кода привожу
Поле А - это целое
Как описать в этом случае тип параметра
Method setMethod = anyClass.getDeclaredMethod("set"+itemEqual.getValue().toString().split("[ |.]")[6].toUpperCase(), new Class[] { String.class });


Код: 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.
package TimeSheet;

import static java.lang.System.out;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.String;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map.Entry;

import javax.persistence.Column;
import javax.persistence.Id;

public class Example {
	public static void main(String[] args) throws Exception {
		String title = "F4;F3;F1;F2";
		String value = "D1;15;AA;12";

		ArrayList<String> listTitle = new ArrayList(Arrays.asList(title.toUpperCase().split(";")));
		String[]          listValue = value.split(";");
		
		HashMap<Integer,Field> listEqual = new HashMap<Integer,Field>();
		Class anyClass = Class.forName("TimeSheet.AnyClass");
		Field[] listField = anyClass.getDeclaredFields();
	    if(listField.length!=0){
	    	for(Field itemField : listField){
		    	Annotation[] listNote = itemField.getAnnotations();
		    	if(listNote.length!=0){
		    		for(Annotation itemNote : listNote){
			    		String note = itemNote.toString().toUpperCase();
			    		if(note.matches("@JAVAX.PERSISTENCE.COLUMN.*")){
			    			int i = listTitle.indexOf(note.split("[=|,]")[11]);
			    			if(i>-1){
			    			  listEqual.put(i,itemField);
			    			}
			    		}	
		    		}
		    	}
	    	}
	    }
	    Object anyObject = anyClass.newInstance();
	    for(Entry<Integer,Field> itemEqual : listEqual.entrySet()){
	    	Method setMethod = anyClass.getDeclaredMethod("set"+itemEqual.getValue().toString().split("[ |.]")[6].toUpperCase(), new Class[] { String.class });
	    	setMethod.invoke(anyObject,new Object[] { listValue[itemEqual.getKey()] });
		    //Method getMethod = anyClass.getDeclaredMethod("get"+itemEqual.getValue().toString().split("[ |.]")[6].toUpperCase());
			//Object getObject = getMethod.invoke(anyObject);
	    }
	}
	
}
	
class AnyClass {
	
	@Id
	@Column(name="F1",columnDefinition="varchar2(10 char)")
	private String s;
	
	@Column(name="F2")
	private String c;

	@Column(name="F3")
	private int a;
	
	public int getA() {
		return a;
	}

	public void setA(int a) {
		this.a = a;
	}

	public String getS() {
		return s;
	}

	public void setS(String s) {
		this.s = s;
	}

	public String getC() {
		return c;
	}

	public void setC(String c) {
		this.c = c;
	}

	
}
...
Рейтинг: 0 / 0
Динам.создание переменной класса и заполнение полей
    #38486572
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Типа такого напрашиваеться - это верный подход ?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
	    	if(itemEqual.getValue().getType().getName()=="java.lang.String"){
		    	Method setMethod = anyClass.getDeclaredMethod("set"+itemEqual.getValue().getName().toUpperCase(), new Class[] { String.class });
		    	setMethod.invoke(anyObject,new Object[] { listValue[itemEqual.getKey()] });
			    Method getMethod = anyClass.getDeclaredMethod("get"+itemEqual.getValue().getName().toUpperCase());
				Object getObject = getMethod.invoke(anyObject);
				out.format("%s%n",getObject.toString());
	    	}
	    	if(itemEqual.getValue().getType().getName()=="int"){
		    	Method setMethod = anyClass.getDeclaredMethod("set"+itemEqual.getValue().getName().toUpperCase(), new Class[] { int.class });
		    	setMethod.invoke(anyObject,new Object[] { Integer.parseInt(listValue[itemEqual.getKey()]) });
		    	Method getMethod = anyClass.getDeclaredMethod("get"+itemEqual.getValue().getName().toUpperCase());
				Object getObject = getMethod.invoke(anyObject);
				out.format("%s%n",getObject.toString());
	    	}
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Динам.создание переменной класса и заполнение полей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]