实例化实现通用接口

时间:2016-10-20 20:37:36

标签: java android

实例化通用接口的泛型类时遇到了一系列问题: 我有一个通用接口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中的新问题有关?我希望有人能够对这一系列问题有所了解并推荐最佳实践。

0 个答案:

没有答案