Я думаю, вы можете быть ослеплены предположениями Java. Рассмотрим этот простой фрагмент кода:
X.Y()
Означает, что метод Y
вызывается для объекта X
или для какого-либо другого объекта, в который X
был неявно преобразован в.
Возможно, это не выглядит удивительным, или вы не видите в этом ничего дурного, поэтому давайте прямо заявим о следствии: X не будет НИКОГДА не будет классом . Вы не вызываете методы для классов, точка.
Естественно, это представляет серьезную проблему взаимодействия с Java в отношении статических членов, и поэтому утверждается, что статические члены класса Java X
будут «рассматриваться» как одноэлементный объект: потому что в противном случае вы будете никогда не сможешь их использовать.
Обратите внимание, что одноэлементные объекты Scala являются настоящими объектами - они являются экземплярами одноэлементных классов. Классы Java со статическими членами, однако, не будут давать начало отдельным объектам. На практике это означает, что эта строка:
val x = X
будет работать, если X
является одноэлементным объектом Scala, но не будет работать, если это Java-класс со статическими членами.