|
|
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
Подскажите, как в скале возвратить нормальный null? Допустим это нужно т.к. этого требует интерфейс. Или, например, использовать из java-кода. Или еще что-нибудь в этом роде. Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2015, 10:54 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
придумал, но способ кривоват. Нужно сделать java-класс хелпер со статическим методом отдающим null Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2015, 11:02 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
chabapokПодскажите, как в скале возвратить нормальный null? Допустим это нужно т.к. этого требует интерфейс. Или, например, использовать из java-кода. Или еще что-нибудь в этом роде. Код: java 1. 2. 3. 4. 5. Компилятор правильно ругается. В Скале параметр дженерика может быть и Value-типом. В интернетах говорят, что правильно вот так: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2015, 22:55 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
Да, так прокатило. Спасибо. Понять бы еще, почему это работает. В скале Null наследован от AnyRef И (насколько мне кажется), раз >: накладывает ограничение, что T должно быть надтипом Null, то такой класс неполучится параметризовать ничем другим, кроме как Null или AnyRef. Но я попробовал -- его получается параметризовать любым моим классом. Т.е., значит, я не понял что означает >:, несмотря на то, что весь день гуглил про type bounds. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 00:56 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
chabapok, Действительно, не всё так просто. http://stackoverflow.com/questions/2336204/how-scala-generic-constraints-to-nullable-types-work авторJust because something extends AnyRef doesn't mean it must be nullable. For instance, Nothing is a subtype of AnyRef, and it is not nullable. The other way around is similar, because Any is a supertype of Null, and any Int is also an Any Null - подтип любого AnyRef, поэтому ">:" тут логичен - наш T должен быть надтипом Null (но не только его, поэтому допустимы и другие значения кроме null). И совсем правильно вот так :) Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 10:38 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
Диез, спасибо. Кажется начинаю понимать... Гипотеза такая. Null наследуется немножко нетрадиционным путем: он наследован от каждого пользовательского класса. Таким образом, первый предок у него - это будет не AnyRef, а наш класс. Тогда с >: все логично. Тут наверное раз зашла такая тема, прикреплю картинки. Но мне все еще неясно, что дает добавление <: AnyRef? И сразу камень в мою гипотезу. По такой логике class MyCoolClass[T >:Nothing <: Any ] должно было бы позволить создать MyCoolClass[Double] и возвращать null вместо Double. Но нет. Не позволяет. Значит пока я еще не понял в полной мере как оно работает. Кстати, тоже вопрос. Если есть код java который хочет вызвать функцию, которая возвращает Double или null, а этот код надо сделать на скале. Как такое сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 21:59 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
Так, вопрос про сопряжение с java снимается. Если мы хотим вернуть или Double или null, то можно сделать так: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 22:08 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
chabapokПодскажите, как в скале возвратить нормальный null? Наиболее правильное решение - найти в Интернете форум про Scala и там задавать свой вопрос, а не шокировать этим словом публику в приличном форуме, не имеющем отношения к Scala. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2015, 09:18 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
chabapokДиез, спасибо. Кажется начинаю понимать... Гипотеза такая. Null наследуется немножко нетрадиционным путем: он наследован от каждого пользовательского класса. Таким образом, первый предок у него - это будет не AnyRef, а наш класс. Тогда с >: все логично. Тут наверное раз зашла такая тема, прикреплю картинки. Но мне все еще неясно, что дает добавление <: AnyRef? Ограничение, чтобы какой-нибудь AnyVal нельзя было подставить. Вот, например: Код: java 1. 2. 3. 4. 5. 6. 7. 8. - код компилируется, причем res в итоге имеет тип java.lang.Double, что логично с точки зрения JVM, но ломает задачу. "<: AnyRef" не допустит такой ситуации. chabapokИ сразу камень в мою гипотезу. По такой логике class MyCoolClass[T >:Nothing <: Any ] должно было бы позволить создать MyCoolClass[Double] и возвращать null вместо Double. Но нет. Не позволяет. Значит пока я еще не понял в полной мере как оно работает. Как я понимаю, [T >:Nothing <: Any] полностью эквивалентно [T]. Собственно, возвращаемся к самому первому вопросу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2015, 10:27 |
|
||
|
Как все-таки в scala возвратить честный null?
|
|||
|---|---|---|---|
|
#18+
Partisan MchabapokПодскажите, как в скале возвратить нормальный null? Наиболее правильное решение - найти в Интернете форум про Scala и там задавать свой вопрос, а не шокировать этим словом публику в приличном форуме, не имеющем отношения к Scala. Ну, мы тут обсуждаем вопрос неподсредственной интеграции с Java, а не языка Scala как такового. Но если вы считаете, что эта тема неприемлема для данного форума, всегда можете сообщить модераторам, они разберутся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2015, 10:29 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38995431&tid=2125233]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 459ms |

| 0 / 0 |
