在写spark streamming读取kafka latest offset的时候,有一下语句:
Map<TopicAndPartition, Object> latestOffsets = JavaConversions.mapAsJavaMap(
        (scala.collection.Map<TopicAndPartition, Object>)kafkaCluster.getLatestLeaderOffsets(topicAndPartitionSet)
        .right()
        .get());
编译报一下错误:
不兼容的类型: scala.collection.immutable.Map<kafka.common.TopicAndPartition,org.apache.spark.streaming.kafka.KafkaCluster.LeaderOffset>无法转换为scala.collection.Map<kafka.common.TopicAndPartition,java.lang.Object>
 
但是把Object换成?貌似就没问题。
Map<TopicAndPartition, ?> latestOffsets = JavaConversions.mapAsJavaMap(
        (scala.collection.Map<TopicAndPartition, ?>)kafkaCluster.getLatestLeaderOffsets(topicAndPartitionSet)
        .right()
        .get());
 
查了一下资料,个人感觉主要有一下两点需要注意。
1,泛型是Object的类型其实这个Object就是指Object,不能考虑它是所有类的父类。
 
List<String> ls = new ArrayList<String>(); // 1
List<Object> lo = ls; //2
 
上面语句2是不能通过编译,也就是说List<String>不是List<Object>的子类型。原因如下:假设语句2 通过编译,那么lo就可以put不是String类型的对象到集合中,那么在取出来的时候就可能出现各种千奇百怪的问题,所以Java编译器对于语句2报错。
 
2,泛型是?类型其实表示类型是未知的,可以认为问号是泛型中所有类型的父类型。
void printCollection(Collection<?> c) {
    for (Object e : c) {
        System.out.println(e);
    }

}
上面的printCollection可以传入任何类型的collection。
 
 
小结:
作为非Java语言出身,确实感觉有点基础不牢的感觉。也只能在碰到问题时一点一滴的积累了。
 

Java泛型Object和?区别的更多相关文章

  1. Java泛型中<? extends E>和<? super E>的区别

    这篇文章谈一谈Java泛型声明<? extends E>和<? super E>的作用和区别 <? extends E> <? extends E> 是 ...

  2. java 泛型E T ?的区别

    Java泛型中的标记符含义:  E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number ...

  3. [转]JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别

    原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...

  4. map泛型 map不指定泛型 与 Map<Object,Object>的区别

    map泛型 map不指定泛型 与 Map<Object,Object>的区别 private void viewDetail(){ Map map1 = new HashMap(); Ma ...

  5. JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别

    1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...

  6. Java泛型中extends和super的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  7. Java泛型中<?> 和 <? extends Object>的异同分析

    相信很多人和我一样,接触Java多年,却仍旧搞不清楚 Java 泛型中 <?>和 <? extends Object>的相似和不同.但是,这应该是一个比较高端大气上档次的Que ...

  8. Java不定参数Object… obj 和 Object[] 的区别

    Java不定参数Object… obj 和 Object[] 的区别 简述: java中方法重载可以实现参数不同自动匹配对应方法.但现实中也存在这种问题.普通传参对于形如下面的方法,却显得臃肿而失优雅 ...

  9. Java class,Object,Class的区别

    代码: http://www.cnblogs.com/hongdada/p/6060487.html package com.company; public class Main { public s ...

随机推荐

  1. Elasticsearch的Java API做类似SQL的group by聚合。

    https://www.cnblogs.com/kangoroo/p/8033955.html

  2. wget: unable to resolve host address “mirrors.163.com” 的解决办法

    wget:无法解析主机地址.这就能看出是DNS解析的问题. 解决办法: 登入root(VPS). 进入/etc/resolv.conf. 修改内容为下nameserver 8.8.8.8 #googl ...

  3. FlashChart json数据配置 中文文档

    http://www.riaos.com/ria/2274 FlashChart json数据配置说明 有朋友要用flashchart,感觉这个还不错.就整理了一份文档. 基本包括了所有json配置的 ...

  4. Django学习系列之Form表单结合ajax

      Forms结合ajax Forms的验证流程: 定义用户输入规则的类,字段的值必须等于html中name属性的值(pwd= forms.CharField(required=True)=<i ...

  5. jQuery异步框架探究1:jQuery._Deferred方法

    jQuery异步框架应用于jQuery数据缓存模块.jQuery ajax模块.jQuery事件绑定模块等多个模块,是jQuery的基础功能之中的一个.实际上jQuery实现的异步回调机制能够看做ja ...

  6. 查找olr备份路径

    使用:ocrdump -local <olr_dump_name> more <olr_dump_name> 来查找 [SYSTEM.OLR.BACKUP.LOC] 的相应键值 ...

  7. js逻辑执行判断

    两个变量或者函数,如果与的关系,a && b,如果a是真则在运行b,如果a是假则不运行b了:如果是或的关系,前者是真则不运行后边的了,否则反过来. 举个例子: <span cla ...

  8. node+express+mysql小例子

    连接:https://www.cnblogs.com/humaotegong/p/5671009.html https://www.cnblogs.com/mibear/p/nodejs.html?u ...

  9. jQuery無刷新上傳之uploadify簡單試用

    先簡單的侃兩句:貌似已經有兩個月的時間沒有寫過文章了,不過仍會像以前那样每天至少有一至兩個小時是泡在园子裏看各位大神的文章.前些天在研究“ajax無刷新上傳”方面的一些插件,用SWFUpload實現了 ...

  10. 【bzoj1269】[AHOI2006]文本编辑器editor

    在bzoj上乱翻,发现了可持久化并查集,然后baidu了一下,发现一种叫rope的东西.   !!!真的太爽了!!!   直接上代码,感受一下(也是蒯来的).       由于rope的底层实现,in ...