方法签名,泛型滥用?


    最近遇到一个选择题,在xmemcached中,get方法原来的签名是这样的:
public  Object  get( final  String key)  throws  TimeoutException,InterruptedException,MemcachedException;
    那么用户使用的时候,需要自己转型,也就是这样

String value = (String)client.get( " key " );

    后来我将get方法的签名改成了泛型方法,xmemcached帮你做这个转型工作,
public   < T >  T get( final  String key)  throws  TimeoutException,InterruptedException, MemcachedException;

    方法的实现因为有了个转型,不得不加上抑制警告,
    @SuppressWarnings( " unchecked " )
    
public   final   < T >  T get( final  String key)  throws  TimeoutException,
            InterruptedException, MemcachedException {
        
return  (T) get(key, DEFAULT_OP_TIMEOUT);
    }
    这样用户使用的时候,就不需要显式转型,而是xmemcached帮你做了,
String value = client.get( " key " );
    后来,我仔细想了这个问题,尽管这里使用了泛型方法,似乎简化了用户的工作,然而却丢掉了编译警告,抑制警告让用户可能忽略这里可能的转型失败,这与泛型的初衷似乎不符。可是,另一个观点冒出来支持我,用户往memcached存进去一头大象,他(她)不会希望取出来的时候变成驴子,我们帮他做这个转型工作可以让用户使用起来更简便。你怎么看呢?
    
     

你可能感兴趣的:(方法签名,泛型滥用?)