[SOLVED] Can you override a function from a generically typed object?

Issue

I have a class in Java that stores generic Object types in a HashMap:

private final Map<Object, NetworkMarker> packetMarker = new WeakHashMap<>();

The packet Object is very large and the map has very high throughput, so the hashing of the packets alone takes up an absurd amount of cpu cycles, and I am curious if it’s possible to minimize this, or I just need better hardware.

Would there be a way to override, despite being a generic Object class with no wrapper, the hashCode function to make it more efficient, or perhaps extend the hashmap to enhance the #get() method? Or any other method that I am overlooking!

Cheers!

EDIT for clarification: The packet Object is not typed. It is of the type Object. It’s being passed in from an external source, so I cannot assign a type.

Solution

You could always wrap it in another class that caches the hash code:

class CachedHash {
    public final Object cached;
    private Integer hashCode;

    public CachedHash(Object cached) {
        this.cached = cached;
    }

    @Override
    public boolean equals(Object o) {
        return cached.equals(o);
    }

    @Override
    public int hashCode() {
        if (hashCode == null) {
            hashCode = cached.hashCode();
        }
        return hashCode;
    }
}

Answered By – shmosel

Answer Checked By – Timothy Miller (BugsFixing Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *