or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

basic-utilities.mdcaching.mdcollections.mdconcurrency.mdgraph-api.mdhash-math.mdimmutable-collections.mdindex.mdio-utilities.mdother-utilities.md

basic-utilities.mddocs/

0

# Basic Utilities

1

2

Essential utilities for common programming tasks including string manipulation, preconditions, null handling, and functional programming support.

3

4

## Package: com.google.common.annotations

5

6

### Annotation Types

7

8

Annotations for API compatibility, testing visibility, and platform compatibility.

9

10

```java { .api }

11

import com.google.common.annotations.*;

12

13

// Beta API annotation - indicates subject to incompatible changes

14

@Beta

15

public class ExperimentalFeature {

16

// This class might change in future releases

17

}

18

19

// GWT compatibility annotations

20

@GwtCompatible(serializable = true, emulated = true)

21

public class SerializableUtility {

22

// Compatible with Google Web Toolkit

23

}

24

25

@GwtIncompatible("Uses reflection not supported in GWT")

26

public class ReflectionUtility {

27

// Cannot be used with GWT

28

}

29

30

// Kotlin transpilation compatibility

31

@J2ktIncompatible("Uses Java-specific features")

32

public class JavaOnlyUtility {

33

// Cannot be used with J2kt (Kotlin transpilation)

34

}

35

36

// Testing visibility

37

public class InternalService {

38

39

@VisibleForTesting

40

protected void resetInternalState() {

41

// This method is only visible for testing purposes

42

// Would normally be private

43

}

44

}

45

```

46

47

**Key Annotations:**

48

49

- `@Beta` - Signifies that a public API is subject to incompatible changes or removal in future releases

50

- `@GwtCompatible` - Indicates that a type may be used with Google Web Toolkit (GWT)

51

- `serializable()` - indicates if type is GWT serializable

52

- `emulated()` - indicates if type is emulated in GWT

53

- `@GwtIncompatible` - Indicates that an API may not be used with Google Web Toolkit (GWT)

54

- `value()` - optional description of why element is incompatible

55

- `@J2ktIncompatible` - Indicates that an API may not be used with J2kt (Kotlin transpilation)

56

- `@VisibleForTesting` - Annotates elements that exist or are more visible than necessary only for test code

57

58

## Package: com.google.common.base

59

60

### Preconditions

61

62

Static convenience methods for checking method preconditions, arguments, and object state.

63

64

```java { .api }

65

import com.google.common.base.Preconditions;

66

67

// Argument validation

68

public void setAge(int age) {

69

Preconditions.checkArgument(age >= 0, "Age must be non-negative: %s", age);

70

this.age = age;

71

}

72

73

// State validation

74

public void withdraw(double amount) {

75

Preconditions.checkState(isOpen(), "Account is closed");

76

Preconditions.checkArgument(amount > 0, "Amount must be positive");

77

this.balance -= amount;

78

}

79

80

// Null checking

81

public void setName(String name) {

82

this.name = Preconditions.checkNotNull(name, "Name cannot be null");

83

}

84

85

// Index validation

86

public T get(int index) {

87

Preconditions.checkElementIndex(index, size(), "Index out of bounds");

88

return elements[index];

89

}

90

91

// Range validation

92

public List<T> subList(int start, int end) {

93

Preconditions.checkPositionIndexes(start, end, size());

94

return new SubList(start, end);

95

}

96

```

97

98

**Key Methods:**

99

- `checkArgument(boolean, String, Object...)` - Validates method arguments

100

- `checkState(boolean, String, Object...)` - Validates object state

101

- `checkNotNull(T, String, Object...)` - Validates non-null references

102

- `checkElementIndex(int, int, String)` - Validates array/list element indexes

103

- `checkPositionIndex(int, int, String)` - Validates array/list position indexes

104

- `checkPositionIndexes(int, int, int)` - Validates start/end index ranges

105

106

### Strings

107

108

Static utility methods for working with String instances, including null-safe operations and common string manipulations.

109

110

```java { .api }

111

import com.google.common.base.Strings;

112

113

// Null safety

114

String safe = Strings.nullToEmpty(null); // ""

115

String nullable = Strings.emptyToNull(""); // null

116

boolean empty = Strings.isNullOrEmpty(""); // true

117

boolean empty2 = Strings.isNullOrEmpty(null); // true

118

119

// Padding

120

String padded = Strings.padStart("42", 5, '0'); // "00042"

121

String right = Strings.padEnd("hello", 10, '!'); // "hello!!!!!"

122

123

// Repetition

124

String repeated = Strings.repeat("hi", 3); // "hihihi"

125

126

// Common prefixes and suffixes

127

String prefix = Strings.commonPrefix("foobar", "foobaz"); // "fooba"

128

String suffix = Strings.commonSuffix("foobar", "bazbar"); // "bar"

129

```

130

131

**Key Methods:**

132

- `nullToEmpty(String)` - Returns empty string for null input

133

- `emptyToNull(String)` - Returns null for empty string input

134

- `isNullOrEmpty(String)` - Checks if string is null or empty

135

- `padStart(String, int, char)` - Pads string at beginning

136

- `padEnd(String, int, char)` - Pads string at end

137

- `repeat(String, int)` - Repeats string specified number of times

138

- `commonPrefix(String, String)` - Finds longest common prefix

139

- `commonSuffix(String, String)` - Finds longest common suffix

140

141

### Joiner

142

143

Joins pieces of text (arrays, Iterables, varargs) with a separator, with options for handling nulls.

144

145

```java { .api }

146

import com.google.common.base.Joiner;

147

148

// Basic joining

149

Joiner joiner = Joiner.on(", ");

150

String result = joiner.join("a", "b", "c"); // "a, b, c"

151

152

// Joining collections

153

List<String> list = Arrays.asList("apple", "banana", "cherry");

154

String fruits = joiner.join(list); // "apple, banana, cherry"

155

156

// Handling nulls - skip them

157

String withNulls = Joiner.on(", ").skipNulls().join("a", null, "b", "c"); // "a, b, c"

158

159

// Handling nulls - substitute

160

String substituted = Joiner.on(", ").useForNull("missing").join("a", null, "b"); // "a, missing, b"

161

162

// Map joining

163

Map<String, String> map = ImmutableMap.of("key1", "value1", "key2", "value2");

164

String mapString = Joiner.on(", ").withKeyValueSeparator("=").join(map); // "key1=value1, key2=value2"

165

```

166

167

**Key Methods:**

168

- `on(String)` - Creates Joiner with separator

169

- `join(Object...)` - Joins varargs elements

170

- `join(Iterable<?>)` - Joins iterable elements

171

- `join(Iterator<?>)` - Joins iterator elements

172

- `skipNulls()` - Returns joiner that skips null elements

173

- `useForNull(String)` - Returns joiner that substitutes nulls with given string

174

- `withKeyValueSeparator(String)` - Returns MapJoiner for joining maps

175

176

### Splitter

177

178

Splits strings into parts using various delimiters and provides options for trimming and filtering results.

179

180

```java { .api }

181

import com.google.common.base.Splitter;

182

183

// Basic splitting

184

Splitter splitter = Splitter.on(',');

185

List<String> parts = splitter.splitToList("a,b,c"); // ["a", "b", "c"]

186

187

// Character-based splitting

188

List<String> chars = Splitter.on(' ').splitToList("hello world"); // ["hello", "world"]

189

190

// Regular expression splitting

191

List<String> regex = Splitter.onPattern("\\s+").splitToList("a b c"); // ["a", "b", "c"]

192

193

// Trimming results

194

List<String> trimmed = Splitter.on(',')

195

.trimResults()

196

.splitToList("a, b , c "); // ["a", "b", "c"]

197

198

// Omitting empty strings

199

List<String> filtered = Splitter.on(',')

200

.omitEmptyStrings()

201

.splitToList("a,,b,"); // ["a", "b"]

202

203

// Limiting splits

204

List<String> limited = Splitter.on(',')

205

.limit(2)

206

.splitToList("a,b,c,d"); // ["a", "b,c,d"]

207

208

// Fixed-width splitting

209

List<String> fixedWidth = Splitter.fixedLength(3).splitToList("abcdef"); // ["abc", "def"]

210

211

// Key-value splitting

212

Map<String, String> keyValue = Splitter.on('&')

213

.withKeyValueSeparator('=')

214

.split("key1=value1&key2=value2"); // {key1=value1, key2=value2}

215

```

216

217

**Key Methods:**

218

- `on(char)` - Creates splitter on character delimiter

219

- `on(String)` - Creates splitter on string delimiter

220

- `onPattern(String)` - Creates splitter on regex pattern

221

- `fixedLength(int)` - Creates splitter on fixed length

222

- `splitToList(CharSequence)` - Splits to List

223

- `split(CharSequence)` - Splits to Iterable

224

- `trimResults()` - Trims whitespace from results

225

- `omitEmptyStrings()` - Omits empty strings from results

226

- `limit(int)` - Limits number of splits

227

- `withKeyValueSeparator(char)` - Creates MapSplitter for key-value pairs

228

229

### CharMatcher

230

231

Determines a true or false value for any Java char value and provides text processing methods based on character matching. Ideal for string cleaning, validation, and transformation.

232

233

```java { .api }

234

import com.google.common.base.CharMatcher;

235

236

// Predefined matchers

237

CharMatcher digits = CharMatcher.digit();

238

CharMatcher letters = CharMatcher.javaLetter();

239

CharMatcher whitespace = CharMatcher.whitespace();

240

CharMatcher ascii = CharMatcher.ascii();

241

242

// Character-based text processing

243

String input = "Hello, World! 123";

244

245

// Remove unwanted characters

246

String lettersOnly = CharMatcher.javaLetter().retainFrom(input); // "HelloWorld"

247

String noDigits = CharMatcher.digit().removeFrom(input); // "Hello, World! "

248

249

// Replace characters

250

String cleaned = CharMatcher.whitespace().replaceFrom(input, '_'); // "Hello,_World!_123"

251

252

// Collapse consecutive characters

253

String collapsed = CharMatcher.whitespace()

254

.collapseFrom("a b c", ' '); // "a b c"

255

256

// Trim characters from ends

257

String trimmed = CharMatcher.whitespace().trimFrom(" hello "); // "hello"

258

259

// Check character patterns

260

boolean allAscii = CharMatcher.ascii().matchesAllOf(input);

261

boolean hasDigits = CharMatcher.digit().matchesAnyOf(input);

262

int digitCount = CharMatcher.digit().countIn(input); // 3

263

264

// Find positions

265

int firstDigit = CharMatcher.digit().indexIn(input); // 14

266

int lastDigit = CharMatcher.digit().lastIndexIn(input); // 16

267

268

// Custom matchers

269

CharMatcher vowels = CharMatcher.anyOf("aeiouAEIOU");

270

CharMatcher notVowels = vowels.negate();

271

CharMatcher consonants = CharMatcher.javaLetter().and(notVowels);

272

273

// Range-based matchers

274

CharMatcher numbers = CharMatcher.inRange('0', '9');

275

CharMatcher upperCase = CharMatcher.inRange('A', 'Z');

276

277

// Combining matchers

278

CharMatcher alphanumeric = CharMatcher.javaLetter().or(CharMatcher.digit());

279

CharMatcher specialChars = CharMatcher.ascii().and(alphanumeric.negate());

280

```

281

282

**Static Factory Methods:**

283

- `any()` - Matches any character

284

- `none()` - Matches no characters

285

- `whitespace()` - Matches whitespace characters

286

- `breakingWhitespace()` - Matches whitespace characters that break text lines

287

- `ascii()` - Matches ASCII characters (0-127)

288

- `digit()` - Matches ASCII digits (0-9)

289

- `javaDigit()` - Matches characters for which Character.isDigit() returns true

290

- `javaLetter()` - Matches characters for which Character.isLetter() returns true

291

- `javaLetterOrDigit()` - Matches letters or digits

292

- `javaUpperCase()` - Matches uppercase characters

293

- `javaLowerCase()` - Matches lowercase characters

294

- `javaIsoControl()` - Matches ISO control characters

295

- `invisible()` - Matches invisible characters (whitespace, control chars, etc.)

296

- `singleWidth()` - Matches single-width characters (excludes double-width CJK)

297

- `is(char)` - Matches exactly one character

298

- `isNot(char)` - Matches any character except the specified one

299

- `anyOf(CharSequence)` - Matches any character in the sequence

300

- `noneOf(CharSequence)` - Matches any character not in the sequence

301

- `inRange(char, char)` - Matches characters in the inclusive range

302

- `forPredicate(Predicate<Character>)` - Matches characters accepted by predicate

303

304

**Instance Methods:**

305

- `matches(char)` - Tests if character matches this matcher

306

- `matchesAnyOf(CharSequence)` - Tests if any character in sequence matches

307

- `matchesAllOf(CharSequence)` - Tests if all characters in sequence match

308

- `matchesNoneOf(CharSequence)` - Tests if no characters in sequence match

309

- `indexIn(CharSequence)` / `indexIn(CharSequence, int)` - First match index

310

- `lastIndexIn(CharSequence)` - Last match index

311

- `countIn(CharSequence)` - Count of matching characters

312

- `removeFrom(CharSequence)` - Remove matching characters

313

- `retainFrom(CharSequence)` - Retain only matching characters

314

- `replaceFrom(CharSequence, char)` - Replace matching chars with character

315

- `replaceFrom(CharSequence, CharSequence)` - Replace matching chars with string

316

- `trimFrom(CharSequence)` - Trim matching characters from both ends

317

- `trimLeadingFrom(CharSequence)` - Trim matching characters from start

318

- `trimTrailingFrom(CharSequence)` - Trim matching characters from end

319

- `collapseFrom(CharSequence, char)` - Collapse consecutive matches to single char

320

- `trimAndCollapseFrom(CharSequence, char)` - Trim then collapse matches

321

322

**Combining Operations:**

323

- `negate()` - Returns matcher that matches opposite characters

324

- `and(CharMatcher)` - Returns matcher that matches both matchers

325

- `or(CharMatcher)` - Returns matcher that matches either matcher

326

- `precomputed()` - Returns optimized version for repeated use

327

328

### Objects and MoreObjects

329

330

Helper methods for Object instances including equality, hashing, and string representation.

331

332

```java { .api }

333

import com.google.common.base.Objects;

334

import com.google.common.base.MoreObjects;

335

336

// Null-safe equality

337

public boolean equals(Object obj) {

338

if (obj instanceof Person) {

339

Person other = (Person) obj;

340

return Objects.equal(this.name, other.name) &&

341

Objects.equal(this.age, other.age);

342

}

343

return false;

344

}

345

346

// Hash code generation

347

public int hashCode() {

348

return Objects.hashCode(name, age, address);

349

}

350

351

// String representation

352

public String toString() {

353

return MoreObjects.toStringHelper(this)

354

.add("name", name)

355

.add("age", age)

356

.omitNullValues()

357

.toString(); // "Person{name=John, age=30}"

358

}

359

360

// First non-null value

361

String name = MoreObjects.firstNonNull(primaryName, secondaryName, "Unknown");

362

```

363

364

**Objects Methods:**

365

- `equal(Object, Object)` - Null-safe equality comparison

366

- `hashCode(Object...)` - Generates hash codes from multiple fields

367

- `toStringHelper(Object)` - Creates ToStringHelper for the object

368

369

**MoreObjects Methods:**

370

- `toStringHelper(Class)` - Creates ToStringHelper for class

371

- `toStringHelper(String)` - Creates ToStringHelper with custom class name

372

- `firstNonNull(T, T)` - Returns first non-null argument

373

374

### Optional

375

376

Immutable object that may contain a non-null reference (predecessor to java.util.Optional).

377

378

```java { .api }

379

import com.google.common.base.Optional;

380

import com.google.common.base.Function;

381

382

// Creating Optional instances

383

Optional<String> present = Optional.of("hello");

384

Optional<String> absent = Optional.absent();

385

Optional<String> nullable = Optional.fromNullable(getString()); // null -> absent

386

387

// Checking presence

388

if (optional.isPresent()) {

389

String value = optional.get();

390

System.out.println(value);

391

}

392

393

// Providing defaults

394

String value = optional.or("default");

395

String lazy = optional.or(new Supplier<String>() {

396

public String get() { return computeDefault(); }

397

});

398

399

// Transformation

400

Optional<Integer> length = optional.transform(new Function<String, Integer>() {

401

public Integer apply(String input) {

402

return input.length();

403

}

404

});

405

406

// Converting to java.util.Optional (if needed)

407

java.util.Optional<String> javaOptional = optional.toJavaUtil();

408

```

409

410

**Key Methods:**

411

- `absent()` - Creates absent Optional

412

- `of(T)` - Creates Optional with non-null value

413

- `fromNullable(T)` - Creates Optional from nullable value

414

- `isPresent()` - Tests if value is present

415

- `get()` - Gets the value (throws if absent)

416

- `or(T)` - Returns value or provided default

417

- `or(Supplier<T>)` - Returns value or supplier result

418

- `orNull()` - Returns value or null

419

- `transform(Function<T, V>)` - Transforms value if present

420

421

### Functional Interfaces

422

423

Core functional interfaces for composing operations (note: prefer java.util.function interfaces in Java 8+).

424

425

```java { .api }

426

import com.google.common.base.Function;

427

import com.google.common.base.Predicate;

428

import com.google.common.base.Supplier;

429

430

// Function - transforms input to output

431

Function<String, Integer> length = new Function<String, Integer>() {

432

public Integer apply(String input) {

433

return input.length();

434

}

435

};

436

437

// Predicate - tests input for boolean property

438

Predicate<String> notEmpty = new Predicate<String>() {

439

public boolean apply(String input) {

440

return !input.isEmpty();

441

}

442

};

443

444

// Supplier - provides instances on demand

445

Supplier<String> timestamp = new Supplier<String>() {

446

public String get() {

447

return new Date().toString();

448

}

449

};

450

```

451

452

### Utility Classes for Functional Interfaces

453

454

Static utility methods for creating and composing functional interfaces.

455

456

```java { .api }

457

import com.google.common.base.Functions;

458

import com.google.common.base.Predicates;

459

import com.google.common.base.Suppliers;

460

461

// Function utilities

462

Function<Object, String> toString = Functions.toStringFunction();

463

Function<String, String> identity = Functions.identity();

464

Function<String, Integer> composed = Functions.compose(length, toUpperCase);

465

Function<String, String> constant = Functions.constant("default");

466

467

Map<String, Integer> map = ImmutableMap.of("a", 1, "b", 2);

468

Function<String, Integer> mapLookup = Functions.forMap(map, 0); // default value 0

469

470

// Predicate utilities

471

Predicate<Object> alwaysTrue = Predicates.alwaysTrue();

472

Predicate<Object> alwaysFalse = Predicates.alwaysFalse();

473

Predicate<Object> isNull = Predicates.isNull();

474

Predicate<Object> notNull = Predicates.notNull();

475

476

Predicate<String> combined = Predicates.and(notEmpty, longerThan5);

477

Predicate<String> either = Predicates.or(isEmpty, startsWithA);

478

Predicate<String> negated = Predicates.not(isEmpty);

479

480

// Supplier utilities

481

Supplier<String> constant = Suppliers.ofInstance("constant value");

482

Supplier<String> memoized = Suppliers.memoize(expensiveComputation);

483

Supplier<String> withTimeout = Suppliers.memoizeWithExpiration(

484

computation, 10, TimeUnit.MINUTES);

485

```

486

487

### Exception Utilities

488

489

Static utility methods for working with exceptions and stack traces.

490

491

```java { .api }

492

import com.google.common.base.Throwables;

493

494

try {

495

riskyOperation();

496

} catch (Exception e) {

497

// Propagate specific exception types

498

Throwables.throwIfInstanceOf(e, IOException.class);

499

Throwables.throwIfUnchecked(e);

500

501

// Or wrap in RuntimeException

502

throw new RuntimeException(e);

503

}

504

505

// Exception analysis

506

Throwable root = Throwables.getRootCause(exception);

507

List<Throwable> chain = Throwables.getCausalChain(exception);

508

String stackTrace = Throwables.getStackTraceAsString(exception);

509

```

510

511

**Key Methods:**

512

- `throwIfInstanceOf(Throwable, Class<X>)` - Propagates if exception is instance of type

513

- `throwIfUnchecked(Throwable)` - Propagates if exception is RuntimeException or Error

514

- `getRootCause(Throwable)` - Gets the root cause of exception chain

515

- `getCausalChain(Throwable)` - Gets list of causes from exception to root

516

- `getStackTraceAsString(Throwable)` - Converts stack trace to string

517

518

### Other Utilities

519

520

Additional utilities for common programming tasks.

521

522

```java { .api }

523

import com.google.common.base.Verify;

524

import com.google.common.base.Stopwatch;

525

import com.google.common.base.Charsets;

526

import java.util.concurrent.TimeUnit;

527

528

// Verification (similar to Preconditions but throws VerifyException)

529

public void processResults(List<String> results) {

530

Verify.verify(!results.isEmpty(), "Results cannot be empty");

531

Verify.verifyNotNull(results.get(0), "First result cannot be null");

532

}

533

534

// Timing operations

535

Stopwatch stopwatch = Stopwatch.createStarted();

536

doWork();

537

long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);

538

System.out.println("Work took: " + stopwatch);

539

540

// Standard charsets (prefer java.nio.charset.StandardCharsets in Java 7+)

541

Charset utf8 = Charsets.UTF_8;

542

Charset ascii = Charsets.US_ASCII;

543

544

// Case format conversion

545

import com.google.common.base.CaseFormat;

546

String camelCase = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "hello_world"); // "helloWorld"

547

String constantCase = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "helloWorld"); // "HELLO_WORLD"

548

```

549

550

**Additional Classes:**

551

- `Verify` - Similar to Preconditions but throws VerifyException for internal invariants

552

- `Stopwatch` - Measures elapsed time with nanosecond precision

553

- `CaseFormat` - Converts between ASCII case formats (camelCase, snake_case, etc.)

554

- `Charsets` - Standard charset constants (prefer java.nio.charset.StandardCharsets)

555

- `Ascii` - Utilities for ASCII character operations

556

- `Defaults` - Default values for primitive and reference types

557

558

### Advanced Utilities

559

560

Additional utility classes for specialized operations.

561

562

```java { .api }

563

import com.google.common.base.Converter;

564

import com.google.common.base.Equivalence;

565

import com.google.common.base.Ticker;

566

import com.google.common.base.StandardSystemProperty;

567

import com.google.common.base.Defaults;

568

import com.google.common.base.Enums;

569

570

// Bidirectional conversion between types

571

public abstract class Converter<A, B> {

572

// Convert A to B

573

protected abstract B doForward(A a);

574

575

// Convert B to A

576

protected abstract A doBackward(B b);

577

578

// Public conversion method

579

public final B convert(A a) {

580

return doForward(a);

581

}

582

583

// Get reverse converter

584

public Converter<B, A> reverse() {

585

return new ReverseConverter<>(this);

586

}

587

}

588

589

// Example: String to Integer converter

590

Converter<String, Integer> stringToInt = new Converter<String, Integer>() {

591

@Override

592

protected Integer doForward(String str) {

593

return Integer.valueOf(str);

594

}

595

596

@Override

597

protected String doBackward(Integer integer) {

598

return integer.toString();

599

}

600

};

601

602

// Equivalence strategy (alternative to equals/hashCode)

603

Equivalence<String> caseInsensitive = new Equivalence<String>() {

604

@Override

605

protected boolean doEquivalent(String a, String b) {

606

return a.equalsIgnoreCase(b);

607

}

608

609

@Override

610

protected int doHash(String s) {

611

return s.toLowerCase().hashCode();

612

}

613

};

614

615

// System properties with null-safe access

616

String javaVersion = StandardSystemProperty.JAVA_VERSION.value();

617

String javaHome = StandardSystemProperty.JAVA_HOME.value();

618

String osName = StandardSystemProperty.OS_NAME.value();

619

620

// Default values for types

621

Object defaultObject = Defaults.defaultValue(Object.class); // null

622

int defaultInt = Defaults.defaultValue(int.class); // 0

623

boolean defaultBoolean = Defaults.defaultValue(boolean.class); // false

624

625

// Enum utilities

626

Optional<DayOfWeek> day = Enums.getIfPresent(DayOfWeek.class, "MONDAY");

627

Converter<String, DayOfWeek> dayConverter = Enums.stringConverter(DayOfWeek.class);

628

629

// Time source abstraction

630

public abstract class Ticker {

631

public abstract long read(); // Current time in nanoseconds

632

633

public static Ticker systemTicker() {

634

return SYSTEM_TICKER;

635

}

636

}

637

```

638

639

**Advanced Classes:**

640

641

- `Converter<A,B>` - Abstract class for bidirectional conversion between types A and B

642

- `Equivalence<T>` - Strategy for determining equivalence between instances (alternative to equals/hashCode)

643

- `Ticker` - Abstract source of nanosecond-precision time values

644

- `StandardSystemProperty` - Enum providing null-safe access to standard system properties

645

- `Defaults` - Utility for getting default values of primitive and reference types

646

- `Enums` - Utility methods for working with Enum instances