繁体   English   中英

具有嵌套类通用参数的Java覆盖方法

[英]Java override method with nested classes generic parameters

我正在尝试重写以下方法,但无法弄清楚泛型机制:

public interface MyInterface<T extends MyGenericObject> {
    public void read(long id, Callback<T> callback);
    public void readAll(Callback<Collection<T>> callback);
}

public class SomeObject extends MyGenericObject {
    ...
}

public class MyClass implements MyInterface<SomeObject> {
    @Override
    public void read(long id, **????** callback) {
        ...
    }

    @Override
    public void readAll(**????** callback) {
        ...
    }
}

请你帮助我好吗?

编辑:我在MyClass和MyInterface之间有一个中间接口,并且通用SomeObject一直没有通过,这就是我的问题...

只需更换每个TSomeObject被传递给MyInterface<T>

// T has become SomeObject = put everywhere SomeObject instead of T
public class MyClass implements MyInterface<SomeObject> { 
    @Override
    public void read(long id, Callback<SomeObject> callback) {
        ...
    }

    @Override
    public void readAll(Callback<Collection<SomeObject>> callback) {
        ...
    }
}

编辑

您已在注释中提到由于擦除问题而无法编译(注释部分中解释了为什么会出现此错误),但是,对于已发布的代码,这是不可能的:

public interface MyInterface<T extends MyGenericObject> {
    void read(long id, Callback<T> callback);
    void readAll(Callback<Collection<T>> callback);
}

public interface Callback<T> {}
public class MyGenericObject {}
public class SomeObject extends MyGenericObject {}

public class MyClass implements MyInterface<SomeObject> {
    @Override public void read(long id, Callback<SomeObject> callback) {}
    @Override public void readAll(Callback<Collection<SomeObject>> callback) {}
}

这段代码编译没有任何错误:

import java.util.Collection;

interface Callback<T> {}

class MyGenericObject {}

interface MyInterface<T extends MyGenericObject> {
    public void read(long id, Callback<T> callback);
    public void readAll(Callback<Collection<T>> callback);
}

class SomeObject extends MyGenericObject { }

class MyClass implements MyInterface<SomeObject> {
    @Override
    public void read(long id, Callback<SomeObject> callback) {
    }

    @Override
    public void readAll(Callback<Collection<SomeObject>> callback) {
    }
}

如果您收到“ MyClass中的read / readAll与MyInterface中的read / readAll冲突;这两种方法具有相同的擦除,但没有一个覆盖另一个”,则您的代码与您所指示的不同。

可以肯定的是,您只能分别使用Callback<SomeObject> callbackCallback<Collection<SomeObject>> callback

尝试

public class MyClass<T extends  SomeObject> implements MyInterface<T> {

现在,您可以在方法实现中使用T。 实例化MyClass时,将指定特定的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM