RFR: 8287064: Modernize ProxyGenerator.PrimitiveTypeInfo [v2]

Joe Darcy darcy at openjdk.java.net
Wed May 25 04:25:59 UTC 2022


On Fri, 20 May 2022 22:18:42 GMT, liach <duke at openjdk.java.net> wrote:

>> Simplify opcode handling, use `final` in `PrimitiveTypeInfo`, and replace the hash map with a simple lookup, similar to what's done in [JDK-8284880](https://bugs.openjdk.java.net/browse/JDK-8284880) (#8242)
>
> liach has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Convert PrimitiveTypeInfo to an enum

> > Did you consider switch (class) {...} in PrimitiveTypeInfo.get?
> 
> I don't think we can switch on class instances yet. Even with preview enabled, best I can get is (for type incompatibility of `Class<?>` and `Class<Integer>`, etc.)
> 
> ```java
> 		return switch (cl) {
> 		    case Class<?> e && e == int.class -> 1;
> 		    case Class<?> e && e == long.class -> 2;
> 		    case Class<?> e && e == boolean.class -> 3;
> 		    case Class<?> e && e == short.class -> 4;
> 		    case Class<?> e && e == byte.class -> 5;
> 		    case Class<?> e && e == char.class -> 6;
> 		    case Class<?> e && e == float.class -> 7;
> 		    case Class<?> e && e == double.class -> 8;
> 		    default -> 0;
> 		};
> ```
> 
> to avoid type incompatibility; this is in turn implemented by a bootstrap method and a loop, which is of course obviously much slower.

Not necessarily recommending this coding idiom, but if you screened on Class.isPrimitive() being true (taking care to avoid void.class), you could switch on the string presentations on the class such as getName or getSimpleName.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8801


More information about the core-libs-dev mailing list