java – 如何将对象的实例类型与通用类型进行比较?

前端之家收集整理的这篇文章主要介绍了java – 如何将对象的实例类型与通用类型进行比较?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我该怎么写这个代码java
  1. public class ComponentsManager
  2. {
  3. private List<IComponent> list = new ArrayList<IComponent>();
  4.  
  5. public <U extends IComponent> U GetComponent() {
  6.  
  7. for (IComponent component : list) {
  8.  
  9. if(component instanceof U)
  10. {
  11. return component;
  12. }
  13. }
  14. }
  15. }

但是我不能对通用类型执行instanceof.我该怎么办?
谢谢.

解决方法

基本上你不能这样做,因为类型擦除.正常的解决方法是将Class对象作为参数传递;例如
  1. public <U extends IComponent> U GetComponent(Class<U> clazz) {
  2. for (IComponent component : list) {
  3. if (clazz.isInstance(component)) {
  4. return clazz.cast(component);
  5. }
  6. }
  7. }

你也可以使用if(clazz.equals(component.getClass())){…但是确实类型匹配…这不是instanceof操作符所做的. instanceof运算符和Class.instanceOf方法都会测试该值的类型是否与赋值兼容.

猜你在找的Java相关文章