W javie odpowiednikiem typedef z C (tylko o wiele szerszym) jest mechanizm klas.
Jeżeli chcesz coś takiego uzyskać, żeby posługiwać się nazwą Analog, to po prostu definiuje się klasę Analog, która może reprezentować zarówno float jak i dowolny inny typ. Można w tym celu jawnie zdefiniować taką klasę (oraz jej odmiany przez delegację, albo dziedziczenie) lub stworzyć z niej klasę szablonową. Tu przykład klasy abstrakcyjnej:
/** zawiera jakiś użyteczny kod charakterystyczny dla wszystkich analogów */
abstract class Analog
{
//...
}
//...
public void device(Analog argument)
{
//...
}
//...
/** szczegółowa wersja konkretna Analogu */
class KonkretnyAnalog1 extends Analog
{
//...
}
//...
/** szczegółowa wersja konkretna Analogu */
class KonkretnyAnalog2 extends Analog
{
//...
}
//...
Analog analog = new KonkretnyAnalog1();
Analog innyAnalog = new KonkretnyAnalog2();
//użycie
device(analog);
device (innyAnalog);
Równie dobrze Analog mógłby być interfejsem, jak i klasa konkretną, która nic lub niewiele robi.
Jedynym sposobem uzyskania prostego aliasingu klas w javie jest dziedziczenie bez dodawania jakichkolwiek nowych właściwości dla klasy potomnej. Tyle, że jest to zbędne mnożenie bytów. Twórcy języka zlikwidowali tę możliwość dla typów opakowujących typy proste dając im po prostu modyfikator final.