编辑我应该原本提到这对于任何人,试图帮助回答这个问题,但(对File1.java getList(String variable)
)这个方法实际上是被调用时,客户端应用程序一个RESTful端点将GET请求发送到调用方法的类上的任何路径。Java的动态方法的返回类型
我有一个将字符串变量作为参数的方法。我试图实现的功能是,基于该字符串变量的值,该方法将构造两个不同列表中的一个,并返回该列表。这可能吗?我尝试使用类似于this stackoverflow question下的第三个答案中的人的通用方法,但是我可能没有正确实现它,因为我得到了Type parameter [GenericType] not a class or parameterized type whose raw type is a class
IllegalArgumentException。这里是我的代码,并有多远我:
File1.java - 有些东西略去了
@Component
public class File1{
private File2 file2;
@Autowired
private File1(File2 file2) {
this.file2 = file2;
}
public <GenericType> GenericType getList(String variable) {
return (GenericType)this.file2.getList(variable);
}
}
File2.java - 有些东西略去了
@Component
public class File2 {
public <GenericType> GenericType getList(String variable) {
List<SomeClass> listA = new ArrayList<>();
List<SomeOtherClass> listB = new ArrayList<>();
if(variable.equals("something")) {
//build listA...
}
else {
//build listB instead...
}
if(variable.equals("something"))
return (GenericType) listA;
else
return (GenericType) listB;
}
}
SomeClass.java
public class SomeClass{
public String string;
public List<NestedList1> nestedList1 = new ArrayList<>();
public List<NestedList2> nestedList2 = new ArrayList<>();
public SomeClass(String string, List<NestedList1> nestedList1 , List<NestedList2> nestedList2) {
this.string= string;
this.nestedList1 = nestedList1 ;
this.nestedList2 = nestedList2 ;
}
}
SomeOtherClass.java
public class SomeOtherClass{
public String string;
public List<NestedList3> nestedList3 = new ArrayList<>();
public SomeOtherClass(String string, List<NestedList3> nestedList3) {
this.string = string;
this.nestedList3 = nestedList3;
}
}
@component和@autowired注释只是弹簧配置的东西,所以你可以忽略它,因为它与问题无关。无论如何,我觉得这比我想要的要简单得多,但我对Java仍然很陌生,这是我第一次使用泛型方法。如果有帮助,正在返回的列表本身不是动态的。这种方法应该只会总是返回这两个特定列表中的一个。
这是我见过的最长的演员表 – jhamon
它有点多余。我可以编辑它,但这仍然不能解决我原来的问题。 – bscott
在你的情况下,我会考虑使用通配符'?',比如'list >'。是的,'(List <?extends SomeOtherClass>)(List)'是完全多余的 –
jhamon