java 泛型 对象 如何判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 泛型 对象 如何判断相关的知识,希望对你有一定的参考价值。

private List<?> list;// 数据List

现在我想判断 list 中实际存储的对象是不是 Task 类型的。请问如何判断?

java中的泛型对象使用instanceof来判断。
具体代码如下:

public class Demo
public static void main(String[] args)
List<Task> list = new ArrayList<Task>();
list.add(new Task());
for(int i=0;i<list.size();i++)
if(list.get(i) instanceof Task)
System.out.println(true);
else
System.out.println(false);




static class Task



instanceof作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。
参考技术A   利用如下方法返回类型值,例如:
public static Class<? extends Object> getGenericType(Class<? extends Object> clazz, Field field)
Method getMethod = getGetMethodByField(clazz,field);
ParameterizedType pt= (ParameterizedType)getMethod.getGenericReturnType();
Class<? extends Object> type = (Class<?>)pt.getActualTypeArguments()[0];
//System.out.println(type.getSimpleName());
//System.out.println(type.getPackage());
return type;
参考技术B object instanceof class
通过instanceof判断object是否是class实例
boolean result = list.get(0) instanceof Task;
参考技术C 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 参考技术D for(T t: list)

if( t instanceof Task)

本回答被提问者采纳

如何在Java中将泛型对象作为方法参数传递? [复制]

【中文标题】如何在Java中将泛型对象作为方法参数传递? [复制]【英文标题】:How to pass generic pbject as method parameter in Java? [duplicate] 【发布时间】:2021-02-08 20:59:24 【问题描述】:

我正在处理一个 Java 项目,我想将一个 Java 对象传递给一个方法以避免代码重复。这是我的代码:

private List<Dog> getListDogs(SearchResponse response) 

    SearchHit[] searchHit = response.getHits().getHits();

    List<Dog> dogList = new ArrayList<>();

    if (searchHit.length > 0) 

        Arrays.stream(searchHit).forEach(hit -> dogList.add(objectMapper.convertValue(hit.getSourceAsMap(),Dog.class))
                );
    

    return dogList;

我还有其他对象需要使用相同的方法,例如 Cat 对象和 Horse 对象。您对我如何使我的方法通用以便仅将对象类型作为参数传递有任何想法吗?

类似这样的:

private List<Generic> getListObject(SearchResponse response , GenericObject object)...

【问题讨论】:

这可能会有所帮助:***.com/questions/450807/… 点赞private &lt;T&gt; List&lt;T&gt; getListObject(SearchResponse response , Class&lt;T&gt; clazz)... @Eklavya-UpvoteDon'tSay 感谢您的回复,但是我如何用我的新参数 Class clazz 替换 Animal.class 和 List 【参考方案1】:

按照上面的cmets,我发现了如何解决我的问题,这是通用方法代码:

private <T> List<T> getSearchResult(SearchResponse response , Class<T> clazz) 

    SearchHit[] searchHit = response.getHits().getHits();

    List<T> lisOfObjects = new ArrayList<>();

    if (searchHit.length > 0) 
             Arrays.stream(searchHit).forEach(hit -> lisOfObjects.add(objectMapper.convertValue(hit.getSourceAsMap(),clazz)));
    

    return lisOfObjects;

【讨论】:

以上是关于java 泛型 对象 如何判断的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么获取list泛型里的对象类型

java泛型

Java学生信息表,Map存储对象,Map使用泛型和增强for循环来做

java - 如何在Java泛型中返回类对象“类型”? [复制]

Java高级 —— 泛型

如何使用 Java 泛型避免 ClassCastExceptions