Posted on 2009-05-24 20:05
dennis 阅读(2193)
评论(5) 编辑 收藏 所属分类:
java
最近遇到一个选择题,在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存进去一头大象,他(她)不会希望取出来的时候变成驴子,我们帮他做这个转型工作可以让用户使用起来更简便。你怎么看呢?