gpt4 book ai didi

Java - 通用静态方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:27 24 4
gpt4 key购买 nike

我一直在尝试了解是否可以制作一种方法,该方法根据返回类推断泛型类型并调用该泛型类型的静态方法。

即下面我创建了 2 个类,它们都实现了 getInstances 和 getAllInstances 方法。然后我尝试创建使用通用包装器中的方法。似乎不管返回类型如何,父类(super class)方法总是在运行。

例如,

public class ParentClass {

public ParentClass(){}

public static <T extends ParentClass> T getInstance(){
return (T) new ParentClass();
}

public static <T extends ParentClass> List<T> getAllInstances(){
ArrayList<ParentClass> parents = new ArrayList<ParentClass>();

for(int i=0;i<5;i++){
parents.add(new ParentClass());
}

return (List<T>) parents;
}

}

A 类

public class SubclassA extends ParentClass{

public SubclassA(){}

@SuppressWarnings("unchecked")
public static SubclassA getInstance(){
return new SubclassA();
}

@SuppressWarnings("unchecked")
public static List<SubclassA> getAllInstances(){
ArrayList<SubclassA> parents = new ArrayList<SubclassA>();

for(int i=0;i<5;i++){
parents.add(new SubclassA());
}

return parents;
}
}

包装器 - 显示问题

 public class Wrapper {

public Wrapper(){
// ... some other stuff
}

public <T extends ParentClass> T getInstance(){
return T.getInstance();
}

public <T extends ParentClass> List<T> getAllInstances(){
return T.getAllInstances();
}

public static void main(String... args){
Wrapper wrapper = new Wrapper();

SubclassA subclassA = wrapper.getInstance();
ParentClass parentClass = wrapper.getInstance();

System.out.println(subclassA.getClass().getName());
System.out.println(parentClass.getClass().getName());
}

}

运行 Wrapper 时出现以下错误:

线程“main”中的异常 java.lang.ClassCastException: ParentClass cannot be cast to SubclassA 在 Wrapper.main(Wrapper.java:20)

我可以用 Java 实现吗?

最佳答案

静态方法不会被覆盖。这个static方法将属于Class级别

关于Java - 通用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com