ADBA Add type safe newFactory method

Douglas Surber douglas.surber at oracle.com
Fri Jul 13 16:46:03 UTC 2018


This is a good question. I defined it the way I did specifically to avoid the explicit cast. I have no strong opinion on which is better. I’ll ask for opinions internally and I hope other members of this list give their thoughts.

Douglas

> On Jul 13, 2018, at 8:26 AM, Mark Rotteveel <mark at lawinegevaar.nl> wrote:
> 
> The existing DataSourceFactory.newFactory(String name) has an unchecked cast using a (possibly inferred) type parameter.
> 
> Would it make sense to add an alternative with the signature:
> 
> public static <T extends DataSourceFactory> T newFactory(Class<T> clazz)
> 
> When you use this, you are tied to an ADBA implementation at compile time, but it will make this more type-safe.
> 
> And maybe the unchecked cast (and type parameter) should be removed from the variant taking a name only.
> 
> That is, change the method to
> 
>  public static DataSourceFactory newFactory(String name) {
>    if (name == null) throw new IllegalArgumentException("DataSourceFactory name is null");
>    return ServiceLoader
>            .load(DataSourceFactory.class)
>            .stream()
>            .filter(p -> p.type().getName().equals(name))
>            .findFirst()
>            .map(Provider::get)
>            .orElse(null);
>  }
> 
> Any casts would then be the explicit responsibility of the developer, instead of accidental due to type inference.
> 
> Mark
> -- 
> Mark Rotteveel



More information about the jdbc-spec-discuss mailing list