2015-05-05 94 views
0

我想实现B级A级的豆豆,春天获得使用ApplicationContext.getBean()

public class AndroidDeviceRule implements DeviceRule {} 

,这是好的

return (DeviceRule) context.getBean(myBeanName, DeviceRule.class); 

但是,我宁愿什么像

return (DeviceRule) context.getBean(mybeanName, Class<? extends DeviceRule>); 

但我不能..

- Syntax error on token ",", (expected after 
    this token 
    - Syntax error on token(s), misplaced 
    construct(s) 
+0

为什么你不能只写(DeviceRule)context.getBean(myBeanName)? – duffymo

+0

是真的,我只是好奇我为什么不能 –

回答

0

你可以做的是定义实际DeviceRule亚型在方法级别的通用型。你可以有两种口味:

// with an explicit type passed in (as in your example) 
<T extends DeviceRule> T getSpringBean(String name, Class<T> type) { 
    return (T) applicationContext.getBean(name, type); 
} 


// with no explicit type; will return whatever the caller expects, 
// obviously resulting in a ClassCastException if the cast fails. 
<T extends DeviceRule> T getSpringBean(String name) { 
    return (T) applicationContext.getBean(name); 
} 
1

我会建议自动装配豆这个

@Autowired 
DeviceRule deviceRule; 

更清洁的方式