Deprecated в java 13

Die

Прославленный
Местный
Старожил I степени
Сообщения
429
Розыгрыши
0
Решения
1
Репутация
578
Реакции
132
Баллы
1 438
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
LostWorld
Вопрос к знатокам, будут ли последствия после замены:
Код:
clazz.newInstance(); => clazz.getDeclaredConstructor().newInstance();
и
Код:
new Integer => Integer.valueOf
Первый на сколько я понял, ни на что не влияет особо, т.к почти 1 и тоже, а второе?
 
Вопрос к знатокам, будут ли последствия после замены:
Код:
clazz.newInstance(); => clazz.getDeclaredConstructor().newInstance();
и
Код:
new Integer => Integer.valueOf
Первый на сколько я понял, ни на что не влияет особо, т.к почти 1 и тоже, а второе?
Уже 15 лет есть автобоксинг и можно писать просто:
Java:
Integer a = 10;
Более того, такой вариант юзает пул констант, что часто сильно дешевле по памяти. Integer.valueOf() эквивалентно этому.
 
  • Мне нравится
Реакции: Die
Уже 15 лет есть автобоксинг и можно писать просто:
Java:
Integer a = 10;
Более того, такой вариант юзает пул констант, что часто сильно дешевле по памяти. Integer.valueOf() эквивалентно этому.
Ну то есть, если я правильно понял - ничего критического нет?

Так же, появился дополнительный вопрос:
Код:
    private void setMethodValue(final Object object, final String methodName, final String value, final Optional<String> splitter, final Optional<Double> minValue, final Optional<Double> maxValue, final Optional<Double> increase)
    {
        try
        {
            final Optional<Method> method = Optional.ofNullable(methodMap.get(methodName));
            if (method.isPresent())
            {
                final boolean isAccessible = method.get().isAccessible();
                method.get().setAccessible(true);
                final Class<?> typeClazz = method.get().getParameterTypes()[0];
                if (typeClazz.isArray())
                {
                    final Class<?> componentType = typeClazz.getComponentType();
                    final String[] arr = value.split(splitter.get());
                    final Object array = Array.newInstance(componentType, arr.length);
                    IntStream.range(0, arr.length).forEach(i -> {
                        final Optional<?> optional = toConverter(method.get().getName(), componentType, arr[i], Optional.empty(), Optional.empty(), Optional.empty());
                        if (optional.isPresent())
                        {
                            Array.set(array, i, optional.get());
                        }
                    });
                    method.get().invoke(object, array);
                }
                else
                {
                    final Optional<?> optional = toConverter(method.get().getName(), typeClazz, value, minValue, maxValue, increase);
                    if (optional.isPresent())
                    {
                        method.get().invoke(object, optional.get());
                    }
                }
                method.get().setAccessible(isAccessible);
            }
            else
            {
                LOGGER.error("method parameter type length error : method name -  : " + methodName);
            }
        }
        catch (final InvocationTargetException | IllegalAccessException e)
        {
            e.printStackTrace();
        }
    }
Код:
method.get().isAccessible(); => method.get().canAccess(object);
Возможно ли такая замена? не будут ли проблемы в дальнейшем?
 
От рефлексии вообще лучше избавляться и параметризировать код с помощью какого-то паттерна
 
  • Мне нравится
Реакции: Die
От рефлексии вообще лучше избавляться и параметризировать код с помощью какого-то паттерна
Возможно когда-то в будущем) пока изучаю исходный код, интересует именно вопросы в исправлении, того что бьет в ГСе и при компиляции, что удалось сделать, но вот будут ли проблемы с такими фиксами? или же они не будут влиять?
 
Ну то есть, если я правильно понял - ничего критического нет?

Так же, появился дополнительный вопрос:
Код:
    private void setMethodValue(final Object object, final String methodName, final String value, final Optional<String> splitter, final Optional<Double> minValue, final Optional<Double> maxValue, final Optional<Double> increase)
    {
        try
        {
            final Optional<Method> method = Optional.ofNullable(methodMap.get(methodName));
            if (method.isPresent())
            {
                final boolean isAccessible = method.get().isAccessible();
                method.get().setAccessible(true);
                final Class<?> typeClazz = method.get().getParameterTypes()[0];
                if (typeClazz.isArray())
                {
                    final Class<?> componentType = typeClazz.getComponentType();
                    final String[] arr = value.split(splitter.get());
                    final Object array = Array.newInstance(componentType, arr.length);
                    IntStream.range(0, arr.length).forEach(i -> {
                        final Optional<?> optional = toConverter(method.get().getName(), componentType, arr[i], Optional.empty(), Optional.empty(), Optional.empty());
                        if (optional.isPresent())
                        {
                            Array.set(array, i, optional.get());
                        }
                    });
                    method.get().invoke(object, array);
                }
                else
                {
                    final Optional<?> optional = toConverter(method.get().getName(), typeClazz, value, minValue, maxValue, increase);
                    if (optional.isPresent())
                    {
                        method.get().invoke(object, optional.get());
                    }
                }
                method.get().setAccessible(isAccessible);
            }
            else
            {
                LOGGER.error("method parameter type length error : method name -  : " + methodName);
            }
        }
        catch (final InvocationTargetException | IllegalAccessException e)
        {
            e.printStackTrace();
        }
    }
Код:
method.get().isAccessible(); => method.get().canAccess(object);
Возможно ли такая замена? не будут ли проблемы в дальнейшем?
Проблемы в дальнейшем будут только если оставлять deprecated поведение :D
А конкретно это заменяется на что-то вроде:
Код:
boolean accessible = method.canAccess(object);
if(method.trySetAccessible()) {
    //access
    method.setAccessible(accessible);
}
else {
    //access error
}
 
  • Мне нравится
Реакции: Die
Нужно открывать javadoc и читать. В целом проблемы скорее всего будут, потому что часть методов апи рефлекта учитывает наследование, часть нет
 
  • Мне нравится
Реакции: Die
если посмотреть сюда,
clazz.newInstance();
заменяем на
clazz.getDeclaredConstructor().newInstance();
я же правильно понял? для 13 явы не нашел, но я думаю что после 9 там не менялось ничего
 
если посмотреть сюда,
clazz.newInstance();
заменяем на
clazz.getDeclaredConstructor().newInstance();
я же правильно понял? для 13 явы не нашел, но я думаю что после 9 там не менялось ничего
Да, наконец ссылки на доки) Написано, что можно менять - значит меняем и проблем не будет
 
  • Мне нравится
Реакции: Die

    Die

    Баллов: 8
    Спасибо
Назад
Сверху Снизу