java - Transform one type to another -
i need improve code:
final string valuestring = value.tostring(); if (path.class.isassignablefrom(destinationtype)) { fixedvalues.put(key, paths.get(valuestring)); } /* ... above, other types ... */ { } else { fixedvalues.put(key, valuestring); } so decided implement transformer-like converts type x y.
i created interface
public interface converter<s, d> { d convert(final s source); class<d> getdestinationclass(); class<s> getsourceclass(); } so when need implement conversion implement interface
public class stringtointegerconverter implements converter<string, integer> { @override public integer convert(final string source) { return integer.parseint(source); } @override public class<integer> getdestinationclass() { return integer.class; } @override public class<string> getsourceclass() { return string.class; } } (example of string -> integer)
now, convert types have class converters contains inside table (guava table 2 keys) converters stored.
private final static immutabletable<class<?>, class<?>, converter<?, ?>> converters; and has method convert
public <s, d> d convert(final class<s> source, final class<d> destination, final s value) { return destination.cast(converters.get(source, destination).convert(source.cast(value))); } the error is
incompatible types: s cannot converted capture#1 of ? at source.cast(value)
because store them in map ? i'm stuck. don't know how can fix this. got feeling it's not possible, i'm posting see if i'm wrong.
i read this spring, it's different way
what trying achieve possible:
@suppresswarnings("unchecked") public <s, d> d convert(final class<s> source, final class<d> destination, final s value) { final converter<s, d> converter = (converter) converters.get(source, destination); return destination.cast(converter.convert(source.cast(value))); } however, code nature cannot guarantee type safety. have guarantee, 3 elements put table compatible.
Comments
Post a Comment