我想将对象作为参数而不是类对象传递为类型文字.我尝试了很多方法,但没有得到输出.
public <T> List<Map<String,Object>> getUIElementsList(Class<T> requiredType) {
doSomeThing();
return this.fieldList;
}
Run Code Online (Sandbox Code Playgroud)
如果我运行的代码将接受以下值作为参数传递.如果我有一个FormBean类
FormBean formBean = new FormBean();
formBean.setUserId(252528);
getUIElementsList(FormBean.class); //restrict this case
getUIElementsList(formBean);
Run Code Online (Sandbox Code Playgroud)
我希望该方法只能接受已经创建的intance对象.我甚至不能使用newInstance()方法来创建另一个对象,因为我也需要旧的对象实例值.
有什么建议?
它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");
}
..
}
Run Code Online (Sandbox Code Playgroud)
定义类型参数时,您只允许通过现有类型(系列)的交集来绑定它们,但不能对给定类型应用否定,就像您想要的东西一样,这类似于“除一种之外的所有类型”。