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

mic*_*son 5 java generics

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

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()方法来创建另一个对象,因为我也需要旧的对象实例值.

有什么建议?

Kon*_*kov 3

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)

定义类型参数时,您只允许通过现有类型(系列)的交集来绑定它们,但不能对给定类型应用否定,就像您想要的东西一样,这类似于“除一种之外的所有类型”