实例化通用接口的泛型类时遇到了一系列问题: 我有一个通用接口IA
interface IA<MyClass, String>
我有一个实现此接口的泛型类
class ClassA implements IA<MyClass, String> {
// constructor
public ClassA(boolean someParam){
}
String func(){
return "abc";
}
}
我遇到的第一个问题是我实例化ClassA的对象
IA<MyClass,String> objectA = new ClassA(false);
我收到了使用&lt;&gt;的警告对于通用类型。所以我补充说
IA<MyClass,String> objectA = new ClassA<>(false);
然后我得到编译错误:无法推断ClassA的类型参数。 在网上搜索了几下之后,我发现我可能需要在定义中指定类型参数,所以我将类定义更改为
class ClassA<MyClass, String> implements IA<MyClass, String> {
// constructor
public ClassA(boolean someParam){
}
String func(){
return "abc";
}
}
现在我解决了这个问题,但在func()上遇到了其他错误,说&#34;需要String,找到了java.lang.String&#34;。
其中一篇帖子暗示编译器混淆了任何&#34; String&#34;在具有泛型类型参数String的类中,应该从类型参数中删除它。所以我改为:
class ClassA<MyClass> implements IA<MyClass, String> {
// constructor
public ClassA(boolean someParam){
}
String func(){
return "abc";
}
void func2(){
MyClassObj.someFunctionCall();//MyClassObj is an instance of MyClasss
}
}
然后上面的更改会破坏MyClassObj.someFunctionCall()。编译器说someFunctionCall()无法识别。
大部分代码已存在于代码库中,而我只修改了一些逻辑。这些问题是否与Java 8中的新问题有关?我希望有人能够对这一系列问题有所了解并推荐最佳实践。