迁移java类以使用泛型

pod*_*mak 6 java generics

我有一个问题是在我的班级中使用泛型.这些是我的课程:

public interface InterE<PK> {}

public interface Inter2<O extends ClassO, P extends ClassP> {}

public class ClassU<O extends ClassO, P extends ClassP> implements InterE<Long> {}

public class ClassP {}

public class ClassO {}

public class Class1<PK, T extends InterE<PK>> {
    public Class1 (Class<T> clazz) {}
}

public class Class2<O extends ClassO, P extends ClassP> extends Class1<Long, ClassU<O, P>> implements Inter2<O, P> {
    public Class2 () {
        //old constructor
        //super(ClassU.class);
        //new - here is problem
        super(ClassU<O, P>.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果ClassU不使用泛型,那么Class2中的旧构造函数工作正常,但我需要在ClassU中使用泛型,所以我在Class2中调用超级构造函数时遇到问题.

Ada*_*ker 2

简短的故事:更改Class1构造函数参数类型 - 从Class<T>Class<?>

为什么?

Class1只需要T延长InterE. Class2声明ClassU为这个T参数。既然ClassU实行了InterE,一切就OK了Class1

您真的需要<T>在构造函数中提供这些信息吗Class1?我认为不:
1)T已经存在于类声明中:Class1<PK, T extends InterE<PK>>,您可以在类中使用它来生成代码并使其编译时安全:

 public class Class1<PK, T extends InterE<PK>> {
     Map<PK, T> map = new HashMap<>(); // can still use T, compile-time safe
 }
Run Code Online (Sandbox Code Playgroud)

2)什么可以Class<T>做,什么Class<?>不能做?- 它可以创建newInstance()安全并做更多的事情,但你很可能不会使用这种可能性。使用还可以进行操作T,例如调用T instance = (T) class.newInstance();,因此您不会有任何无法克服的限制。


归档时间:

查看次数:

214 次

最近记录:

10 年,4 月 前