在写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. 289. Game of Live

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  2. [bzoj4278][ONTAK2015]Tasowanie_后缀数组_贪心

    Tasowanie bzoj-4278 ONTAK-2015 题目大意:给定两个字符串,求两个字符串二路归并之后生成的字典序最小的字符串是什么. 注释:$1\le len_1,len_2\le 2\c ...

  3. [bzoj2962]序列操作_线段树_区间卷积

    序列操作 bzoj-2962 题目大意:给定一个n个数的正整数序列,m次操作.支持:1.区间加:2.区间取相反数:3.区间求选c个数的乘积和. 注释:$1\le n,m\le 5\cdot 10^4$ ...

  4. Ubuntu 16.04安装Redis

    版本:4.0.2 下载地址:https://redis.io/download 离线版本:(链接: https://pan.baidu.com/s/1bpwDtOr 密码: 4cxk) 安装过程: 源 ...

  5. SHARP 加粉

    http://v.ku6.com/show/7ufwm7pqfF8D_f13IdCaag...html

  6. Centos 备份 还原

    備份: tar cvpzf backup.tgz / --exclude=/backup.tgz --exclude=/mnt 記得一定要排除備份文件本身哦! 還原: tar xvpfz backup ...

  7. web常见之音乐播放器

    代码来源于:这位Github小伙伴,我只负责解说! 效果图如下: 先上HTML代码 源码: <!DOCTYPE html> <html> <head> <me ...

  8. Alluxio增强Spark和MapReduce存储能力

    Alluxio的前身为Tachyon.Alluxio是一个基于内存的分布式文件系统:Alluxio以内存为中心设计,他处在诸如Amazon S3. Apache HDFS 或 OpenStack Sw ...

  9. ajax请求锁屏功能

    我们有时候在进行ajax请求的时候希望页面不允许点击,等请求结束之后才可以进行点击,那么可以写: $(".cloudos-container").ajaxStart($.block ...

  10. php高效获取数据分页

    mysql.php 获取数据库中的记录,全然个人经验总结,仅供參考! <? php /** *PHP+MYSQL数据库基本功能 *http://blog.csdn.net/yown */ ### ...