Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Пользовательская аннотация / 25 сообщений из 27, страница 1 из 2
04.12.2013, 18:41:07
    #38489410
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Доброго дня господа !

Подскажите можно ли писать СВОИ аннотации
Т.е. аналог библиотекам HIBERNATE

@Column(name="DAY" format="DD/MM/YYYY")

Подкиньте ссылки и примеры

Спасибо
...
Рейтинг: 0 / 0
04.12.2013, 20:03:47
    #38489543
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Можно. Гуглить apt и доки по Reflection API.
...
Рейтинг: 0 / 0
04.12.2013, 21:14:14
    #38489584
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Ещё вопрос в тему: можно ли создавать аннотации уровня компиляции вроде override, то есть реализовать какие то проверки кода на этапе компиляции?
...
Рейтинг: 0 / 0
04.12.2013, 21:18:53
    #38489595
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
DoSOfRedRiverЕщё вопрос в тему: можно ли создавать аннотации уровня компиляции вроде override, то есть реализовать какие то проверки кода на этапе компиляции?
Можно. apt это как раз инструмент который работает во время компиляции.
...
Рейтинг: 0 / 0
05.12.2013, 08:01:57
    #38489750
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Blazkowicz,

Спасибо - получилось !
...
Рейтинг: 0 / 0
05.12.2013, 17:59:16
    #38490826
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Blazkowicz,

Пишут что апт в следующем мажорном релизе уберут, и пользоваться нужно javax.annotation.processing и javax.lang.model.
...
Рейтинг: 0 / 0
05.12.2013, 18:44:00
    #38490902
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
HOME_XДоброго дня господа !

Подскажите можно ли писать СВОИ аннотации
Т.е. аналог библиотекам HIBERNATE

@Column(name="DAY" format="DD/MM/YYYY")

Подкиньте ссылки и примеры

Спасибо
Можно сравнительно легко закодить свои аннотации. Почитать у Хорстмана во 2-м томе.
Но аннотация сама по себе ничего не делает. Это просто Label. Или атрибут в декларации
пакета/класса/поля или метода.

А вот когда аннотация создана, применена и ты готов сделать ее хендлер. Вот это
интересная тема.
...
Рейтинг: 0 / 0
06.12.2013, 00:44:15
    #38491150
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
maytonА вот когда аннотация создана, применена и ты готов сделать ее хендлер. Вот это
интересная тема.


Да сделал уже - загрузка текстового файла в разные классы под обработку Hibernate
...
Рейтинг: 0 / 0
06.12.2013, 19:49:02
    #38492344
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Дай людЯм код, хвастун. Ато прибежал, заинтриговал...
...
Рейтинг: 0 / 0
08.12.2013, 23:34:03
    #38493501
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
mayton,

Нет вопросов - буду рад если данный код будет кому-то в помощь....
"ты готов сделать ее хендлер"
Если я верно Вас понял относительно обработчика
У меня это опознание метода SET и присвоение полю этого метода значения

Доп. вопрос - обработчики ЯВНОГО приведения типов можно как то оптимизировать
Имею в виду это ...
case "int":
itemEqual.getValue().invoke(anyObject,new Object[] {Integer.parseInt(lineData[itemEqual.getKey()])});
break;


Код: 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.
	@ImportField(name="TYPE")
	public void setType(String type) {
		this.type = type;
	}

[/SRC JAVA]


[SRC JAVA]
package TimeSheet;

import java.io.File;

import org.hibernate.Session;

import java.io.FileNotFoundException;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;

import static java.lang.System.out;

public class ImportTextFile {

	@Inherited
	@Documented
	@Target(ElementType.METHOD)
	@Retention(RetentionPolicy.RUNTIME)
	public @interface ImportField {
	   String name();
	   String format() default "";
	}

	private Session session;
	private String  fileName;
	private Class   anyClass;
	
	public ImportTextFile(Session session, Class anyClass,String fileName,boolean execute) {

		setSession(session);
		setAnyClass(anyClass);
		setFileName(fileName);
		if(execute){
			try{
				ExecuteImport();
			} catch(Exception except) {
				except.printStackTrace();
			}
		}
	}
	
	public void ExecuteImport() throws Exception {
		if(anyClass!=null && fileName!=null){
			Scanner scanFile = null;
			try{
				scanFile = new Scanner(new File(fileName));
				} catch (FileNotFoundException except) {
					except.printStackTrace();
				}
			if(scanFile.hasNext()){
				HashMap<String,String> listHead = new HashMap<String,String>();
				while(scanFile.hasNext()){
					String lineHead = scanFile.nextLine();
					if(lineHead.contains("[Data]")){break;}
					if(lineHead.split("=").length>1){listHead.put(lineHead.split("=")[0],lineHead.split("=")[1]);}
				}
				ArrayList<String> listTitle = new ArrayList(Arrays.asList(listHead.get("FieldList").split(listHead.get("FieldDelimiter"))));
				HashMap<Integer,Method> listEqual = new HashMap<Integer,Method>();
				Method[] listMethod = anyClass.getDeclaredMethods();
				for(Method itemMethod : listMethod){
					if(itemMethod.isAnnotationPresent(ImportField.class)){
						int i = listTitle.indexOf(itemMethod.getAnnotation(ImportField.class).name());
						if(i>-1 && itemMethod.getName().matches("set.*") && itemMethod.getParameterTypes().length==1){
							listEqual.put(i,itemMethod);
							}
						}
					}
				while(scanFile.hasNext()){
					String[] lineData = scanFile.nextLine().split(listHead.get("FieldDelimiter"));
					Object anyObject = anyClass.newInstance();
					for(Entry<Integer,Method> itemEqual : listEqual.entrySet()){
						switch(itemEqual.getValue().getParameterTypes()[0].getName()){
							case "int":
								itemEqual.getValue().invoke(anyObject,new Object[] {Integer.parseInt(lineData[itemEqual.getKey()])});
								break;
			    			case "java.lang.String":
			    				itemEqual.getValue().invoke(anyObject,new Object[] {lineData[itemEqual.getKey()]});
			    				break;
			    			case "java.util.Date":
			    				itemEqual.getValue().invoke(anyObject,new Object[] { new SimpleDateFormat(listHead.get("DateTimeFormat")).parse(lineData[itemEqual.getKey()]) });
			    				break;
						};
					}
					Method getMethod0=anyClass.getDeclaredMethod("getNaim");
					Method getMethod1=anyClass.getDeclaredMethod("getKind");
					Method getMethod2=anyClass.getDeclaredMethod("getTime");
					Method getMethod3=anyClass.getDeclaredMethod("getDay");
					out.format("%s %s %s %s %n ",getMethod0.invoke(anyObject).toString(),getMethod1.invoke(anyObject).toString(),getMethod2.invoke(anyObject).toString(),getMethod3.invoke(anyObject).toString());
					//Class anyClass = Class.forName(className);
					//setMethod = anyClass.getDeclaredMethod(itemEntry.getValue().getName(), new Class[] { String.class/Date.class/int });
					//session.saveOrUpdate(anyObject);
				}
			}
		}
	}
	
	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public Class getAnyClass() {
		return anyClass;
	}

	public void setAnyClass(Class anyClass) {
		this.anyClass = anyClass;
	}
	
}
...
Рейтинг: 0 / 0
09.12.2013, 14:13:15
    #38494080
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
автор обработчики ЯВНОГО приведения типов можно как то оптимизировать

Вряд ли. У меня оно так же работает для примитивов.
...
Рейтинг: 0 / 0
10.12.2013, 00:57:43
    #38494821
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
DoSOfRedRiverдля примитивов.


В смысле "примитивов", а что есть другое решение ?
Подскажите пожалуйста
...
Рейтинг: 0 / 0
10.12.2013, 18:22:10
    #38496030
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
HOME_X,


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
for (Map.Entry<Class, String> entry : args.entrySet()) {
            switch (entry.getKey().toString()) {
                case "boolean"  : result.add(Boolean.parseBoolean(entry.getValue()));   break;
                case "long"     : result.add(Long.parseLong(entry.getValue()));         break;
                case "int"      : result.add(Integer.parseInt(entry.getValue()));       break;

                default         : result.add(getInstance(entry.getKey(), entry.getValue()));
            }
}

private static<T> T getInstance(Class<T> tClass, String value) throws Exception {
        return (T)tClass.getConstructor(String.class).newInstance(value);
}



Здесь правда только стринговский конструктор по дефолту, ну думаю переделать труда не составит, если понадобится.
...
Рейтинг: 0 / 0
10.12.2013, 18:42:10
    #38496060
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Используйте TYPE и isAssignableFrom или ==
Код: java
1.
	Integer.TYPE;
...
Рейтинг: 0 / 0
10.12.2013, 18:50:07
    #38496071
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Код: java
1.
result.add(Object ..)

можно было как-то перегрузить.
...
Рейтинг: 0 / 0
10.12.2013, 19:37:46
    #38496126
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
mayton,

Да там не суть важно было.
...
Рейтинг: 0 / 0
11.12.2013, 01:30:32
    #38496340
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
DoSOfRedRivermayton,

Да там не суть важно было.

Но case все равно остаеться - т.е. момент ЯВНОГО приведения типа ?
...
Рейтинг: 0 / 0
11.12.2013, 18:00:14
    #38497512
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
HOME_X,

Да. Ну это скорей уже не привидение, а инициализация какая-то.
...
Рейтинг: 0 / 0
12.12.2013, 11:44:26
    #38498194
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
DoSOfRedRiverHOME_X,


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
for (Map.Entry<Class, String> entry : args.entrySet()) {
            switch (entry.getKey().toString()) {
                case "boolean"  : result.add(Boolean.parseBoolean(entry.getValue()));   break;
                case "long"     : result.add(Long.parseLong(entry.getValue()));         break;
                case "int"      : result.add(Integer.parseInt(entry.getValue()));       break;

                default         : result.add(getInstance(entry.getKey(), entry.getValue()));
            }
}

private static<T> T getInstance(Class<T> tClass, String value) throws Exception {
        return (T)tClass.getConstructor(String.class).newInstance(value);
}



Здесь правда только стринговский конструктор по дефолту, ну думаю переделать труда не составит, если понадобится.

Тогда уж так
Код: 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.
import java.util.Map;
import static java.lang.Long.parseLong;
import static java.lang.Integer.parseInt;
import static java.lang.Boolean.parseBoolean;

public class StringLess {
    public static void parseStringsByClass(Map<Class, String> map, IResult result) throws Exception {
        for (Map.Entry<Class, String> entry : map.entrySet()) {
            Class key = entry.getKey();
            String value = entry.getValue();

            if (key.isPrimitive()) {
                if (boolean.class == key) {
                    result.add(parseBoolean(value));
                } else if (long.class == key) {
                    result.add(parseLong(value));
                } else if (int.class == key) {
                    result.add(parseInt(value));
                }
            } else {
                result.add(getInstance(key, value));
            }
        }
    }

    private static <T> T getInstance(Class<T> tClass, String value) throws Exception {
        return (T) tClass.getConstructor(String.class).newInstance(value);
    }
}


Код: java
1.
2.
3.
4.
5.
6.
public interface IResult {
    public void add(boolean b);
    public void add(int i);
    public void add(long l);
    public void add(Object o);
}
...
Рейтинг: 0 / 0
12.12.2013, 11:57:15
    #38498225
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Только примитивные типы здесь вообще не нужны..
...
Рейтинг: 0 / 0
12.12.2013, 15:54:22
    #38498768
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Порефакторил маленько)

ImportTextFile.java
Код: 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.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
package timesheet;

import java.io.File;
import java.io.FileNotFoundException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.util.List;
import java.lang.reflect.Constructor;
import java.util.Date;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.hibernate.Session;

import static java.lang.System.out;
import static java.util.Arrays.asList;

public class ImportTextFile {

    private Session session;
    private String fileName;
    private Class anyClass;

    public ImportTextFile(Session session, Class anyClass, String fileName, boolean execute) throws Exception {
        setSession(session);
        setAnyClass(anyClass);
        setFileName(fileName);
        if (execute) {
            executeImport();
        }
    }

    public final void executeImport() throws FileNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ParseException {
        if (anyClass == null || fileName == null) { return; }
        try (Scanner scanFile = new Scanner(new File(fileName))) {
            if (!scanFile.hasNext()) { return; }

            HashMap<String, String> listHead = new HashMap<>();

            while (scanFile.hasNext()) {
                String lineHead = scanFile.nextLine();
                if (lineHead.contains("[Data]")) {
                    break;
                }
                String[] splited = lineHead.split("=");
                if (splited.length > 1) {
                    listHead.put(splited[0], splited[1]);
                }
            }

            List<String> listTitle = asList(listHead.get("FieldList").split(listHead.get("FieldDelimiter")));
            HashMap<Integer, Method> listEqual = new HashMap<>();

            for (Method itemMethod : anyClass.getDeclaredMethods()) {
                if (itemMethod.isAnnotationPresent(ImportField.class)) {
                    int i = listTitle.indexOf(itemMethod.getAnnotation(ImportField.class).name());
                    if (i > -1 && itemMethod.getName().matches("set.*") && itemMethod.getParameterTypes().length == 1) {
                        listEqual.put(i, itemMethod);
                    }
                }
            }
            while (scanFile.hasNext()) {
                String[] lineData = scanFile.nextLine().split(listHead.get("FieldDelimiter"));
                Object instance = anyClass.newInstance();
                for (Entry<Integer, Method> itemEqual : listEqual.entrySet()) {
                    String string = lineData[itemEqual.getKey()];
                    Method method = itemEqual.getValue();
                    
                    Class firstParam = method.getParameterTypes()[0];
                    method.invoke(instance,
                            (firstParam != Date.class)
                            ? instantiate(firstParam, string)
                            : new SimpleDateFormat(listHead.get("DateTimeFormat")).parse(string));
                }

                Method //методы могут быть не публичными?
                        naim = anyClass.getDeclaredMethod("getNaim"),
                        kind = anyClass.getDeclaredMethod("getKind"),
                        time = anyClass.getDeclaredMethod("getTime"),
                        day  = anyClass.getDeclaredMethod("getDay");

                printlnSpaceSeparated(naim.invoke(instance), kind.invoke(instance), time.invoke(instance), day.invoke(instance));
                //Class anyClass = Class.forName(className);
                //setMethod = anyClass.getDeclaredMethod(itemEntry.getValue().getName(), new Class[] { String.class/Date.class/int });
                //session.saveOrUpdate(anyObject);
            }

        }
    }


    //<editor-fold defaultstate="collapsed" desc="instantiation">
    private static final Map<Class, Constructor> CONSTRUCTORS = initConstructors();
    private static Map<Class, Constructor> initConstructors() {
        Map<Class, Constructor> map = new HashMap<>();
        try {
            Constructor
                    booleanC = getConstructor(Boolean.class),
                    byteC    = getConstructor(Byte.class),
                    shortC   = getConstructor(Short.class),
                    integerC = getConstructor(Integer.class),
                    longC    = getConstructor(Long.class),
                    floatC   = getConstructor(Float.class),
                    doubleC  = getConstructor(Double.class);

            map.put(boolean.class, booleanC);
            map.put(Boolean.class, booleanC);
            map.put(byte.class, byteC);
            map.put(Byte.class, byteC);
            map.put(short.class, shortC);
            map.put(Short.class, shortC);
            map.put(int.class, integerC);
            map.put(Integer.class, integerC);
            map.put(long.class, longC);
            map.put(Long.class, longC);
            map.put(float.class, floatC);
            map.put(Float.class, floatC);
            map.put(double.class, doubleC);
            map.put(Double.class, doubleC);

            map.put(String.class, getConstructor(String.class));
        } catch (Exception ex) {
            Logger.getLogger(ImportTextFile.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
        return map;
    }

    private static <T> Constructor<T> getConstructor(Class<T> cls) throws NoSuchMethodException {
        return cls.getConstructor(String.class);
    }

    private static <T> T instantiate(Class<T> cls, String value) throws NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        Constructor<T> constructor = CONSTRUCTORS.get(cls);
        if (constructor == null) {
            CONSTRUCTORS.put(cls, constructor = getConstructor(cls));
        }
        return constructor.newInstance(value);
    }
    //</editor-fold>


    private static void printlnSpaceSeparated(Object... objects) {
        if (objects.length > 0) {
            out.print(objects[0]);
        }
        for (int i = 1; i < objects.length; ++i) {
            out.print(" ");
            out.print(objects[i]);
        }
        out.println();
    }

    public Session getSession() {
        return session;
    }

    public final void setSession(Session session) {
        this.session = session;
    }

    public String getFileName() {
        return fileName;
    }

    public final void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public Class getAnyClass() {
        return anyClass;
    }

    public final void setAnyClass(Class anyClass) {
        this.anyClass = anyClass;
    }
}

ImportField.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package timesheet;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Inherited
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ImportField {

    String name();
    String format() default "";
}

...
Рейтинг: 0 / 0
12.12.2013, 22:02:37
    #38499268
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
avp.mk,

Чем это вам свич не нравится?
...
Рейтинг: 0 / 0
13.12.2013, 00:58:31
    #38499364
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
Спасибо за помощь господа !

Принцип понял - сигнатура конструктора вместо switch
Детали досматриваю - разбираю

Спасибо avp.mk за пример
...
Рейтинг: 0 / 0
13.12.2013, 11:50:19
    #38499752
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
DoSOfRedRiverЧем это вам свич не нравится?
Эстетически))
В данном случае больше не нравятся строки.

Код: java
1.
2.
3.
4.
5.
        boolean someValue = true;
        switch (Boolean.toString(someValue)) {
            case "true":  System.out.println("true");  break;
            case "false": System.out.println("false"); break;
        }
...
Рейтинг: 0 / 0
13.12.2013, 12:43:11
    #38499873
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательская аннотация
автор
Код: java
1.
2.
map.put(boolean.class, booleanC);
map.put(Boolean.class, booleanC);



Насколько я понял, здесь и для примитивов и для враперов один и тот же конструктор используется. При инвоке методов с сигнатурой вроде
Код: java
1.
void setValue(boolean value);

оно может на приведении завалиться. Я потому и использовал конструкции вроде

Код: java
1.
case "boolean"  : result.add(Boolean.parseBoolean(entry.getValue()));   break;
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Пользовательская аннотация / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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