【问题标题】:returning cast subclass返回演员表子类
【发布时间】:2012-12-20 13:01:24
【问题描述】:

我有一个超类Entity,还有像PostComment 等子类。

我想向Entity 添加一个通用方法,该方法将在子类中返回一个演员表。所以例如我想这样称呼:

List<Post> posts = Post.findAll();

我试过这个:

public class Entity {
    public static List<?> findAll() {
        return ???;
    }
}

但我认为语法不是我所追求的,因为当我这样做时:

for(Post post : Post.findAll()) {

}

它给出了错误Type mismatch

【问题讨论】:

    标签: java inheritance


    【解决方案1】:
    public class Entity<T> {
        public List<T> findAll() {
            return ???;
        }
    }
    

    public class Post extends Entity<Post> {
    

    【讨论】:

    • 无法对行中的非静态类型进行静态引用:public static List findAll()
    • 好的,但它不再是静态的。我猜你不能在java中做到这一点
    • 如果您希望它是静态的,请选择另一个答案
    【解决方案2】:

    如果你想要一个泛型方法而不是一个泛型类,你可以尝试类似的方法:

    public class Entity {
        static <T extends Entity> List<T> findAll(Class<T> type){
            List<T> list = new ArrayList<T>();
    
            //populate your list  
    
            return list;
        }
    }
    

    你可以这样使用它:
    List&lt;Post&gt; list = Entity.findAll(Post.class);

    【讨论】:

    • 可能是最接近我想要的东西
    • @Paul,很高兴为您提供帮助。如果它适合您,您可以考虑将其标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2017-04-11
    • 2021-02-11
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多