LINUX.ORG.RU

Извращения с явой, так можно?


0

0
public class TimeMeter{
  private long time;
  private long getTime(){
    long newTime = new Date().getTime();
    try{
      return newTime - time; 
    }finally{
      time = newTime;
    }
  }
}

Пример высосан из хвоста, и можно обойтись и без такого изврата, но в целом интересн вопрос, что запрещает производить какието вычисления в блоке finally, уже после return? Да это не интуитивно, и противоречит стилистике.

★★☆

Никто не мешает. Только зачем new Date()? System.currentTimeMillis() неправославен?

Ian ★★
()
Ответ на: комментарий от wfrr

>>Да это не интуитивно, и противоречит стилистике.

И? Вижу только лишнюю запятую. И ещё одной не не хватает. С выдвинутым тезисом не спорю.

rual_ilmarranen
()
Ответ на: комментарий от wfrr

А что будет если присвоить результат переменной? Неужели компиллируется и не кидается исключениями?

cathode
()
Ответ на: комментарий от wfrr

public class FinallyTest
{
    public static int test()
    {
        try
        {
            return 3;
        }
        finally
        {
            System.out.println("test");
        }
    }

    public static void main(String... args)
    {
        int x = test();
        System.out.println(x);
    }
}

Говорит

test
3

Если в finally добавить return 10 говорит

test
10

Забавно...

cathode
()
Ответ на: комментарий от cathode

А вот так таки ругается на отсутствующий return

public class FinallyTest
{
    public static int test()
    {
        try
        {
            throw new Exception();
        }
        catch(Exception e)
        {
        }
        finally
        {
            System.out.println("test");
        }
    }

    public static void main(String... args)
    {
        int x = test();
        System.out.println(x);
    }
}

cathode
()
Ответ на: комментарий от wfrr

>И return должен быть в catch или в конце метода, что не так?

Всё так - в чём проблема?

yyk ★★★★★
()
Ответ на: комментарий от wfrr

Ну ты посмотри пример без catch чуть выше. Finally выполняется после блока try по любому, т.е. после return в try. По логике return должен быть в finally по любому, независимо от того, что есть в try. А получается, что return просто помещает возвращаемое значение в стек и дальше выполняется finally без return и метод успешно заканчивается возвращая значение из try

cathode
()
Ответ на: комментарий от cathode

>По логике return должен быть в finally по любому, независимо от того, что есть в try.

Ты инопланетянин шоле? Де такую логику продают?

wfrr ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.