Java:一般返回由参数指定的类型集

Java:一般返回由参数指定的类型集,java,generics,Java,Generics,我希望有一个方法,可以创建指定接口的列表。我似乎不能得到它,这样我就不必投下或我失去了我的类型安全 此版本要求强制转换集合,并生成不安全类型强制转换警告: public static Set<? extends Setting> getSettings(Class<? extends Setting> className){ Set<? extends Setting> result = new HashSet<>(); try {

我希望有一个方法,可以创建指定接口的列表。我似乎不能得到它,这样我就不必投下或我失去了我的类型安全

此版本要求强制转换集合,并生成不安全类型强制转换警告:

public static Set<? extends Setting> getSettings(Class<? extends Setting> className){
    Set<? extends Setting> result = new HashSet<>();
    try {
        Setting settingsObject = className.getDeclaredConstructor().newInstance();
        // do something with it and populate result-set
    } catch (Exception e) {
        e.printStackTrace();
    }

    return result;
}   


public static void main(String[] args)  {
    Set<LiabilitySetting> liabilitySettings = (Set<LiabilitySetting>) getSettings(LiabilitySetting.class);
    for (LiabilitySetting s: liabilitySettings) {
        s.doSomething();
    }

}

公共静态集改用有界类型参数

public static <T extends Setting> Set<T> getSettings(Class<T> className) {
publicstaticsetgetsettings(类名){
通配符
告诉编译器它是
设置
(或
设置
本身)的某个子类,但编译器不知道
中的
是否与
集中的
相同

当您将它绑定到一个类型参数时,编译器仍然知道
T
Setting
Setting
的子类,但现在它知道
Set
Class
具有相同的类型,因此不需要强制转换

public static <T extends Setting> Set<T> getSettings(Class<T> className) {