在我的游戏引擎中,我有一个实体对象列表,其中有许多子类(例如播放器,立方体,相机等).我想有一个方法,我传递一个Class对象,最后得到一个相同类的List – 例如我想说这样的话:

List boxes = getEntities(Box.class);

到目前为止我有这个:

public List getEntities(Class extends Entity> t) {

ArrayList list = new ArrayList<>();

for (Entity e : entities) {

if (e.getClass() == t) {

list.add(e);

}

}

return Collections.unmodifiableList(list);

}

但是当然返回实体列表,这意味着列表中的每个实例都必须转换为Box类.有没有办法在Java中正确地做到这一点?

最佳答案 我推荐以下内容,它建立在现有答案的基础上,但避免使用@SuppressWarnings等:

public List getEntities(Class type) {

List list = new ArrayList<>();

for (Entity e : entities) {

if (type.isInstance(e)) {

list.add(type.cast(e));

}

}

return Collections.unmodifiableList(list);

}

或者,如果您使用的是Guava:

public ImmutableList getEntities(Class type) {

return ImmutableList.copyOf(Iterables.filter(entities, type));

}

java泛型 算法_非常具体的Java泛型问题 – 如何返回传递给方法的相同类型?相关推荐

  1. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  2. java数据挖掘算法_[转载]干货,基于Java和C++的数据挖掘Apriori算法实现

    Apriori算法实现 Apriori算法的思想还是很容易理解的,实现起来虽然麻烦,但是还是比较容易的.下面是我使用Java语言实现的Apriori算法,实现了AprioriAlgorithm 类,包 ...

  3. java常用算法_五分钟记住Java常用的八种排序算法与代码实现

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...

  4. java 线性回归算法_线性搜索或顺序搜索算法在Java中如何工作? 示例教程

    java 线性回归算法 大家好,之前,我讨论了二进制搜索算法的工作原理,并分享了在Java中实现二进制搜索的代码. 在那篇文章中,有人问我是否还有其他搜索算法? 如果数组中的元素未排序,又该如何使用它 ...

  5. 鲸鱼优化算法_盘点 35 个 Java 代码优化细节

    代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...

  6. java python算法_用Java,Python和C ++示例解释的搜索算法

    java python算法 什么是搜索算法? (What is a Search Algorithm?) This kind of algorithm looks at the problem of ...

  7. java清理垃圾_垃圾清理势在必行——Java垃圾收集算法

    一起学习 1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象.该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发 ...

  8. java回溯算法_回溯算法讲解--适用于leetcode绝大多数回溯题目

    什么是回溯算法? 回溯法是一种系统搜索问题解空间的方法.为了实现回溯,需要给问题定义一个解空间. 说到底它是一种搜索算法.只是这里的搜索是在一个叫做解空间的地方搜索. 而往往所谓的dfs,bfs都是在 ...

  9. java轮训算法_负载均衡算法WeightedRoundRobin(加权轮询)简介及算法实现

    Nginx的负载均衡默认算法是加权轮询算法,本文简单介绍算法的逻辑,并给出算法的Java实现版本. 算法简介 有三个节点{a, b, c},他们的权重分别是{a=5, b=1, c=1}.发送7次请求 ...

最新文章

  1. 公司用的 MySQL 团队开发规范
  2. karyoploteR: 基因组数据可视化 R 包
  3. Java8之lambda表达式的总结
  4. java 加载中_Java 6类加载中更快的是什么?
  5. 【机器学习】深刻理解决策树-动手计算ID3算法
  6. 如何使用Action.Invoke()触发一个Storyboard
  7. mysql 存储过程写入文件
  8. Visio—如何导出文件为图片?
  9. svm python 多分类_机器学习之SVM多分类
  10. 通过企业微信服务端API接口进行群发应用消息
  11. 关于6月20日PMP认证考试准考信下载及考场规定的通知
  12. 用cocos studio生成plist文件
  13. 0基础学软件测试好学吗?这2个硬性要求没有达到的话奉劝你不要学...
  14. python中button对象的方法_Python cmds.shelfButton方法代码示例
  15. 西门子在华启动“零碳先锋计划”;希尔顿欢朋在华项目签约数突破600 | 美通社头条...
  16. 邮箱smtp服务器及端口收集
  17. 清理服务器多余的图片(文件、数据)
  18. MyEcplise_Maven搭建SSM框架
  19. 论文阅读 || 目标检测系列 —— RCNN详解
  20. 外媒评出全球32家AI独角兽公司:中国占10家

热门文章

  1. C# Winform 出现异常:无法将顶级控件添加到控件,解决方案如下:
  2. AFN框架和SDWebImage框架的上手体验
  3. 数据库mysql表怎么设置外键_如何设置数据库中的外键
  4. Android开发之Glide设置View背景图的方法
  5. 从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()
  6. IP地址与无符号整数值相互转换
  7. Python 通过 pip 安装第三方模块成功,导入该模块失败的解决方法
  8. MySQL数据库权限管理
  9. bootstrap 查缺补漏
  10. find命令--Linux命令应用大词典729个命令解读