С Потоковым API Java 8 можно сделать что-то вроде этого:
Stream
.of(throwable.getStackTrace())
.map(StackTraceElement::toString)
.collect(Collectors.joining("\n"));
Это возьмет массив элементов трассировки стека, преобразует их, чтобы представить в виде строки и присоединиться в многострочную строку.
Все типы значений, включая встроенные примитивы системы общих типов (CTS), НАПРЯМУЮ наследуются от типа CTS "System.ValueType" (кроме перечислений).
Таким образом, компилятор может сказать, исследуя базовый тип любого типа. Если это "System.ValueType", то это тип значения, в противном случае это ссылочный тип.
Изменить: перечисления, как в
public Enum Shipper {FedEx, Aerborne, USPS, Stork}
... не являются производными непосредственно от System.ValueType, они являются производными от System .Enum, производный от System.ValueType ...
Типы значений фактически являются производными от System.ValueType , который сам является производным от System.Object.
Типы значений получены из System.ValueType
, который, среди прочего, дает стандартную (но медленную) реализацию GetHashCode
и Equals
. (Они медленные, потому что используют отражение.)
Примитивные типы, такие как int
, могут быть упакованы в типы значений в IL с помощью инструкции box
. У них есть специальные инструкции IL для работы с ними.
Ссылочные типы - это все другие классы.
Существуют также указатели, которые могут использоваться в небезопасном
коде и не являются производными от объекта
вообще. РЕДАКТИРОВАТЬ - доказательство .