Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > различные jre


Автор: skhilkov 27.12.2006, 13:09
У меня возник такой вопрос я проверяю версию jre и  в зависимости от этого включаю(не включаю) в свой код какие-то классы, которые, скажем, есть в 1.5 и нет в 1.4, например:
Код

if (version.compareToIgnoreCase("1.4") == 0)
{
...
}
if (version.compareToIgnoreCase("1.5") == 0)
{
  java.net.Proxy proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress(strHttpProxyHost, DEFAULT_PROXY_PORT));
//этого класса нет в 1.4!
}

Так вот, вопрос - может ли это вызвать какие-либо проблемы (например на каких-либо jre, возможно под различными ОС)?
Я проверял на винде в версиях 1.4 и 1.5 - все работает. Но руководство относится к таким проверкам с недоверием...

Автор: y3u 27.12.2006, 13:53
я тоже отношусь к таким проверкам с недоверием.
Зачем писать разный код, коорый делает одно и тоже?
Если надо поддерживать минорные версии, то надо изначально писать под минорные, т.к. в Java заявлена обратная совместимость и то, что работает под 1.4 будет также работать под 1.5 без дописывания

Автор: LSD 27.12.2006, 14:26
Цитата(skhilkov @  27.12.2006,  13:09 Найти цитируемый пост)
Так вот, вопрос - может ли это вызвать какие-либо проблемы (например на каких-либо jre, возможно под различными ОС)?

Лучше это делать через фабрику:
Код
public abstract class ConnectorFactory
{
  public static final int DIRECT = 0;
  public static final int HTTP = 0;
  public static final int SOCKS = 0;

  private static ConnectorFactory connectorFactory;

  public abstract URLConnection connect(URL url, int proxyType, String host, int port) throws IOException;

  public static ConnectorFactory getConnectorFactory()
  {
    if(connectorFactory == null)
    {
      if(isJDK15())
      {
        try
        {
          connectorFactory = (ConnectorFactory) Class.forName("com.mycompany.product.ConnectorFactory15").newInstance();
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
      }
      else if(isJDK14())
      {
        try
        {
          connectorFactory = (ConnectorFactory) Class.forName("com.mycompany.product.ConnectorFactory14").newInstance();
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
      }
    }
    return connectorFactory;
  }
}

Код
public class ConnectorFactory15 extends ConnectorFactory
{
  public URLConnection connect(URL url, int proxyType, String host, int port) throws IOException
  {
    Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(host, port));
    return url.openConnection(proxy);
  }
}

И меньше проблем с компиляцией будет.

Автор: skhilkov 28.12.2006, 14:49
Цитата(y3u @  27.12.2006,  13:53 Найти цитируемый пост)
Если надо поддерживать минорные версии, то надо изначально писать под минорные, т.к. в Java заявлена обратная совместимость и то, что работает под 1.4 будет также работать под 1.5 без дописывания 

y3u, 
Просто если заявлено, что минимальная поддерживаемая версия - 1.4, то почему те, кто используют более поздними версиями не могут воспользоваться дополнительными преимуществами? Это даже своего рода стимул для обновления jre.



LSD, 
Спасибо, так и сделаю!

Автор: y3u 28.12.2006, 18:36
Цитата(skhilkov @  28.12.2006,  14:49 Найти цитируемый пост)
Это даже своего рода стимул для обновления jre.


ИМХО

я с тобой не соглашусь smile Это с архитектурной точки зрения очень плохой подход. Весь проект дожлен быть выполнен в одной спецификации и по одним конвеншенсам smile да, можно начинать в процессе работы потихоньку мигрировать код на мажорные версии, но вот уж точно не такими способами smile Зачем тогда оставлять поддержку 1.4, спрашивается? smile ну напишите, что минимальная версия 1.5 тогда, а вот на эти свистопляски только жалко тратить времени и денег...

Автор: val 28.12.2006, 19:05
Мне тоже кажется, что делать в некотом смысле винегрет из кода смысла нет... Ведь написать код, который будет полностью удовлетворять стилям версий 1.4 и 1.5. одновременно вы не сможете, да и не надо это. Вот и получся винегрет из 1.4 и 1.5.  smile  Нитуда и нисюда... А сами понимаете, как-то некрасиво...

Автор: skhilkov 28.12.2006, 22:03
y3u, 
видите ли, может с архитектурной точки зрения это не очень хорошо, но в моем случае следует учесть специфику продукта - это апплет. Пока еще не все юзеры перешли на мажорные версии, и вот им то уж точно нельзя заявлять о том, что их версия jre не годится(поэтому и нельзя заявить что минимальная версия 5.0), зато те, кто поставит более новую версию jre будут довольны(как мне кажется, таких все же больше)! 
С точки же зрения "винигрета" - то я не соглашусь с вами, по крайней мере тот пример, что привел LSD, очень даже логичен, построен на основе известного паттерна - где ж здесь винигрет? 

Автор: y3u 28.12.2006, 22:19
Цитата(skhilkov @  28.12.2006,  22:03 Найти цитируемый пост)
где ж здесь винигрет? 


винигирет будет, когда таких фектори будет много штук и они превратятся в стратегию smile

к тому же, уже официально самым последним JRE считается мустанговский. К тому же автоматическое обновление у большинства есть. К тому же для апплета можно указать минимальный JRE, чтобы пользователю предложили его загрузить автоматически... к чему карячиться? Я тоже работаю под 1,4 СДК, но JRE у меня стоит шестой давно...

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

Автор: skhilkov 29.12.2006, 12:14
y3u, 

Цитата(y3u @  28.12.2006,  22:19 Найти цитируемый пост)
К тому же для апплета можно указать минимальный JRE, чтобы пользователю предложили его загрузить автоматически... к чему карячиться? 


Видишь ли, эти самые дятлы - конечные покупатели, то есть они с помощью апплета делают заказы, поэтому подстраиваться под них приходится....   Да я и сам думаю, что идеальным вариантом была бы поддержка минорной версии 1.5, но, к сожалению, не я это решаю...  smile 
Да и к тому же не все посетители таких сайтов имеют такой инет, чтобы спокойно закачать себе новую версию java, представь что там половина по модему ходит....

Автор: LSD 29.12.2006, 14:02
Модератор: давайте не будем углубляться, в обсуждение того, какие пользователи плохие. Это не имеет никакого отношения к Java. Если хотите создайте тему в разных вопросах, и там занимайтесь орнитологией.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)