java type erasure workaround