Skip to content

Y-Sulphuris/Interners

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java Interners

License: MIT

Simple java interners library
Allows to add intern() method (similarly to String.intern()) to your immutable classes with customizable interners

There is some standard interner implementations:

MapInterner - interner based on java.util.Map (java.util.HashMap in particular)
ConcurrentMapInterner - same as MapInterner but based on ConcurrentMap
ProbInterner - interner that accepts chance to deduplicate value and parent interner


Usage

import com.ydo4ki.interners.ConcurrentMapInterner;
import com.ydo4ki.interners.Internable;
import com.ydo4ki.interners.Interner;
import com.ydo4ki.interners.MapInterner;

class MyImmutableClass implements Internable<MyImmutableClass> {
	
	private final int x;
	private final long a;
	
	MyImmutableClass(int x, long a) {
		this.x = x;
		this.a = a;
	}
	
	private static final MapInterner<MyImmutableClass> interner = new ConcurrentMapInterner<>();
	
	@Override
	public Interner<MyImmutableClass> interner() {
		return interner;
	}
	
	public static MyImmutableClass create(int x, long a) {
		return new MyImmutableClass(x, a).intern(); // returns canonical instance with x and a values
	}
	
	public static void dropInterner() {
		interner.clear(); // clear table of MyImmutableClass
	}
}

Installation

Maven

<dependency>
    <groupId>com.ydo4ki</groupId>
    <artifactId>Interners</artifactId>
    <version>1.0.0</version>
</dependency>

Gradle

implementation 'com.ydo4ki:Interners:1.0.0'