如何限制方法仅接受对象作为参数而不是类对象作为类型文字?

时间:2015-12-03 10:47:29

标签: java generics

我想将对象作为参数而不是类对象传递为类型文字。我尝试了很多方法,但没有得到输出。

public <T> List<Map<String,Object>> getUIElementsList(Class<T> requiredType) {
       doSomeThing();
       return this.fieldList;
}

如果我运行的代码将接受以下值作为参数传递。如果我有一个FormBean类,那么

FormBean formBean = new FormBean();  
formBean.setUserId(252528); 
getUIElementsList(FormBean.class); //restrict this case
getUIElementsList(formBean); 

我希望该方法只能接受已经创建的intance对象。我甚至不能使用newInstance()方法来创建另一个对象,因为我也需要旧的对象实例值。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

Class<T>本身也代表了一些实例 - 这是Class类型的实例,由T类型参数化。

我认为您可以做的最好的事情是添加一个检查,如果提供的类型是Class的实例,如果是,则抛出IllegalArgumentException

public <T> List<Map<String,Object>> getUIElementsList(T value) {
    if (value instanceof Class) { 
        throw new IllegalArgumentException("Class instances are not supported");
    }
    ..
}

在定义类型参数时,你只允许通过现有(系列)类型的交集来绑定它们,而不是对给定类型应用否定,比如你想要的东西,这就像< em>&#34;除了一个&#34; 之外的所有类型。

相关问题