Scala: как наследовать “статический слот”?

Если Вы не можете использовать TRUNCATE TABLE из-за внешних ключей и/или триггеров, можно рассмотреть к:

  • отбрасывание все индексы;
  • делают обычные УДАЛЯЮТ;
  • воссоздают все индексы.

Это может убыстриться, УДАЛЯЮТ несколько.

7
задан Damian 19 October 2009 в 02:52
поделиться

3 ответа

Theoretically speaking, Java's behavior in this respect is very broken. The fact that subclasses inherit static members really doesn't make any sense from an object-oriented point of view. Statics are really nothing more than fancy, scoped globals. Inheritance is something you see at the class level, but statics really aren't at the class level (since they're global) so inheritance shouldn't apply. The fact that it does in Java is...disturbing.

Scala has really taken the high road in this department; something for which we should all be grateful. As mentioned in another answer, the correct way to define "inherited" statics is to extract the inherited members out into a trait:

trait Inherited {
  def foo() { ... }
  def bar(i: Int) = ...
}

class Person {
  ...
}

object Person extends Inherited

class Student extends Person {
  ...
}

object Student extends Inherited

It may seem needlessly more verbose than Java, but trust me when I say that the semantics are a lot less surprising as a result.

14
ответ дан 6 December 2019 в 07:51
поделиться

Я не знаю, что вы имели в виду, но сопутствующий объект может расширяться от некоторых черт / классов:

class Person
class Student extends Person

trait Aggregation[T] {
  val all: List[T]
}

object Person extends Aggregation[Person] {
  val all: List[Person] = List(new Person, new Person)
}

object Student extends Aggregation[Student] {
  val all: List[Student] = List(new Student, new Student)
}

println(Person.all) // prints all persons
println(Student.all) // prints all students
6
ответ дан 6 December 2019 в 07:51
поделиться

Я только что увидел эту запись в блоге: Деньги против десятичных в SQL Server .

В основном это говорит о том, что у денег есть проблема с точностью ...

declare @m money
declare @d decimal(9,2)

set @m = 19.34
set @d = 19.34

select (@m/1000)*1000
select (@d/1000)*1000

Для типа денег вы получите 19.30 вместо 19.34. Я не уверен, существует ли сценарий приложения, в котором деньги делятся на 1000 частей для расчета, но этот пример действительно демонстрирует некоторые ограничения.

Это просто определение класса и одноэлементное создание экземпляров, объединенные в одно.

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

Объекты могут расширять классы, но не другие объекты. В конце концов, «объект» - это всего лишь одноэлементный экземпляр - определение класса «объекта» скрыто.

Разумно ли ожидать, что особые отношения между сопутствующими объектами и сопутствующими классами будут проецировать дополнительную иерархию классов на сопутствующие объекты?

Я подозреваю, что лучший способ добиться зависимости между Person и Student - это делегировать.

object Person { val all = List(1,2,3) }
object Student { val all = Person.all.filter(_ % 2 == 0) }
4
ответ дан 6 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: