Package org.bukkit.metadata

# Class LazyMetadataValue

java.lang.Object
org.bukkit.metadata.MetadataValueAdapter
org.bukkit.metadata.LazyMetadataValue

All Implemented Interfaces:
  `MetadataValue`

Direct Known Subclasses:
  `FixedMetadataValue`

public class LazyMetadataValue extends MetadataValueAdapter
The LazyMetadataValue class implements a type of metadata that is not computed until another plugin asks for it.

By making metadata values lazy, no computation is done by the providing plugin until absolutely necessary (if ever). Additionally, LazyMetadataValue objects cache their values internally unless overridden by a `LazyMetadataValue.CacheStrategy` or invalidated at the individual or plugin level. Once invalidated, the LazyMetadataValue will recompute its value when asked.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static enum`
`LazyMetadataValue.CacheStrategy`
Describes possible caching strategies for metadata.

## Field Summary

### Fields inherited from class org.bukkit.metadata.MetadataValueAdapter

`owningPlugin`

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`LazyMetadataValue(@NotNull Plugin owningPlugin)`
Protected special constructor used by FixedMetadataValue to bypass standard setup.
``
`LazyMetadataValue(@NotNull Plugin owningPlugin, @NotNull Callable<Object> lazyValue)`
Initialized a LazyMetadataValue object with the default CACHE_AFTER_FIRST_EVAL cache strategy.
``
`LazyMetadataValue(@NotNull Plugin owningPlugin, @NotNull LazyMetadataValue.CacheStrategy cacheStrategy, @NotNull Callable<Object> lazyValue)`
Initializes a LazyMetadataValue object with a specific cache strategy.

## Method Summary

Modifier and Type
Method
Description
`void`
`invalidate()`
Invalidates this metadata item, forcing it to recompute when next accessed.
`@Nullable Object`
`value()`
Fetches the value of this metadata item.

### Methods inherited from class org.bukkit.metadata.MetadataValueAdapter

`asBoolean, asByte, asDouble, asFloat, asInt, asLong, asShort, asString, getOwningPlugin`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### LazyMetadataValue

public LazyMetadataValue(@NotNull @NotNull Plugin owningPlugin, @NotNull @NotNull Callable<Object> lazyValue)
Initialized a LazyMetadataValue object with the default CACHE_AFTER_FIRST_EVAL cache strategy.

Parameters:
  `owningPlugin` - the `Plugin` that created this metadata value.
  `lazyValue` - the lazy value assigned to this metadata value.

### LazyMetadataValue

public LazyMetadataValue(@NotNull @NotNull Plugin owningPlugin, @NotNull @NotNull LazyMetadataValue.CacheStrategy cacheStrategy, @NotNull @NotNull Callable<Object> lazyValue)
Initializes a LazyMetadataValue object with a specific cache strategy.

Parameters:
  `owningPlugin` - the `Plugin` that created this metadata value.
  `cacheStrategy` - determines the rules for caching this metadata value.
  `lazyValue` - the lazy value assigned to this metadata value.

### LazyMetadataValue

protected LazyMetadataValue(@NotNull @NotNull Plugin owningPlugin)
Protected special constructor used by FixedMetadataValue to bypass standard setup.

Parameters:
  `owningPlugin` - the owning plugin

## Method Details

### value

@Nullable public @Nullable Object value()
Description copied from interface: `MetadataValue`
Fetches the value of this metadata item.

Returns:
  the metadata value.

### invalidate

public void invalidate()
Description copied from interface: `MetadataValue`
Invalidates this metadata item, forcing it to recompute when next accessed.