Если у меня есть простой тип данных, то, что может быть представлено одним примитивным значением, например, int, например, счетчик, и мой класс является неизменяемым (это важно), я хотел бы определить все бизнеслогика, в том числе предварительные условия, такие как «не может быть отрицательным», так что ее использование безопасно, и оно может содержать только действительные данные.С такими типами вы не можете случайно добавить количество колес к количеству пассажиров (если они разные типы счетчиков), но вы могли бы, если бы оба были просто целыми числами.
Так что мне бы хотелось, чтобы был способ аннотировать эти типы как «встроенные», чтобы ссылки экземпляра были заменены на значение состояния, а вызовы методов экземпляра были заменены вызовами статических методов, принимающих или получающихсостояние, которое JIT может также включить.Одним из ограничений является то, что не все сайты использования могут быть заменены, как, например, включение одного из них в список Java.Но массивы могут быть эффективно заменены.
Таким образом, основное преимущество будет состоять в том, чтобы «удалить накладные расходы на объект», а также косвенно создать объект и затраты на сборку мусора, сохраняя при этом ваш код максимально безопасным.
JIT делает метод встраивания для нас, и это нормально в большинстве случаев, но он не устраняет (по крайней мере, до сих пор) накладные расходы на объект, поэтому состояние объектов обычно создается с примитивными типами, а не с бизнесом.-моделировать конкретные типы.Специфичные для бизнес-модели типы безопаснее в использовании и следуют принципу СУХОЙ;Вы должны определить свои предварительные условия только один раз.Но цена, которую вы должны заплатить за такое простое, во многих случаях просто слишком высока.
В идеале я бы предпочел инструмент уровня байтового кода, время компиляции или время загрузки, потому что я делаю смешанную Java-Scala-кодирование.
Я нашел этот вопрос , который связан, постер хочет знать, когда JIT выполняет автоматическое встраивание, в то время как я хочу явное встраивание, даже как часть общедоступного API.
Последнее замечание: пожалуйста, не проповедуйте мне, что «объекты дешевы».Я занимаюсь Java в течение 10 лет и отвечаю за профилирование JVM в моей команде, по крайней мере, последние 6 лет, поэтому я до боли знаю, сколько стоят объекты.