diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/bukkit/metadata/FixedMetadataValue.java | 25 | ||||
-rw-r--r-- | src/main/java/org/bukkit/metadata/LazyMetadataValue.java | 9 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/main/java/org/bukkit/metadata/FixedMetadataValue.java b/src/main/java/org/bukkit/metadata/FixedMetadataValue.java index 41f89a0e..be1c5aa0 100644 --- a/src/main/java/org/bukkit/metadata/FixedMetadataValue.java +++ b/src/main/java/org/bukkit/metadata/FixedMetadataValue.java @@ -6,9 +6,15 @@ import java.util.concurrent.Callable; /** * A FixedMetadataValue is a special case metadata item that contains the same value forever after initialization. - * Invalidating a FixedMetadataValue has no affect. + * Invalidating a FixedMetadataValue has no effect. + * + * This class extends LazyMetadataValue for historical reasons, even though it overrides all the implementation + * methods. it is possible that in the future that the inheritance hierarchy may change. */ public class FixedMetadataValue extends LazyMetadataValue { + /** Store the internal value that is represented by this fixed value. */ + private final Object internalValue; + /** * Initializes a FixedMetadataValue with an Object * @@ -16,10 +22,17 @@ public class FixedMetadataValue extends LazyMetadataValue { * @param value the value assigned to this metadata value. */ public FixedMetadataValue(Plugin owningPlugin, final Object value) { - super(owningPlugin, CacheStrategy.CACHE_ETERNALLY, new Callable<Object>() { - public Object call() throws Exception { - return value; - } - }); + super(owningPlugin); + this.internalValue = value; + } + + @Override + public void invalidate() { + + } + + @Override + public Object value() { + return internalValue; } } diff --git a/src/main/java/org/bukkit/metadata/LazyMetadataValue.java b/src/main/java/org/bukkit/metadata/LazyMetadataValue.java index 57fdc502..d67e633c 100644 --- a/src/main/java/org/bukkit/metadata/LazyMetadataValue.java +++ b/src/main/java/org/bukkit/metadata/LazyMetadataValue.java @@ -16,7 +16,7 @@ import org.bukkit.plugin.Plugin; public class LazyMetadataValue extends MetadataValueAdapter implements MetadataValue { private Callable<Object> lazyValue; private CacheStrategy cacheStrategy; - private SoftReference<Object> internalValue = new SoftReference<Object>(null); + private SoftReference<Object> internalValue; private static final Object ACTUALLY_NULL = new Object(); /** @@ -40,11 +40,16 @@ public class LazyMetadataValue extends MetadataValueAdapter implements MetadataV super(owningPlugin); Validate.notNull(cacheStrategy, "cacheStrategy cannot be null"); Validate.notNull(lazyValue, "lazyValue cannot be null"); - + this.internalValue = new SoftReference<Object>(null); this.lazyValue = lazyValue; this.cacheStrategy = cacheStrategy; } + /** Protected special constructor used by FixedMetadataValue to bypass standard setup. */ + protected LazyMetadataValue(Plugin owningPlugin) { + super(owningPlugin); + } + public Object value() { eval(); Object value = internalValue.get(); |