我试图理解Java中的泛型类型,理论上它看起来是可以理解的,但是当我需要将它应用于实际代码时,我遇到了问题.我想声明将返回泛型类型的抽象方法.让我们假设我有一个名为Magicable的空接口,2类实现它:Magican和Witch.现在我想知道这3个声明之间的区别是什么:
/*1*/protected abstract <T extends Magicable> List<T> getMagicables();
/*2*/protected abstract List<? extends Magicable> getMagicables();
/*3*/protected abstract List<Magicable> getMagicables();
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,当我想在扩展抽象类的某个类中实现此方法的主体时,我遇到了问题:
@Override
protected List<Magican> getMagicable() {..}
Run Code Online (Sandbox Code Playgroud)
我有警告信息:
类型安全:MagicanService类型的getMagicable()的返回类型List <Magican>需要未经检查的转换以符合MagicableService类型的List <Magicable>.
在第二种情况下,我没有这个警告,但我在抽象类中有问题,我在上面声明了抽象方法:
public void <T extends Magicable> T getOneFromList() {
List<T> list = getMagicables();
//.....
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在getMagicables()调用中有编译错误:
类型不匹配:无法从List <capture#2-of转换?将Magicable>扩展到List <T>
第三种情况导致上述两个代码中的编译错误.在我的情况下,我不认为它是否正确解决.
我对 Angular Nx 很陌生。我必须根据 Nx 工作区结构创建可重用的 Angular 组件并将其存储为库。我找不到合适的命令。我尝试使用以下方法创建库:
ng generate lib mylib
Run Code Online (Sandbox Code Playgroud)
它按预期创建库,但我想存储可以在我的应用程序中稍后使用的组件。