在写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. CentOS7下安装单机版RabbitMQ及权限赋予

    RabbitMQ官网rpm软件包地址:https://www.rabbitmq.com/releases/ 一.安装环境: CentOS7.erlang-19.0.4-1.el7.centos.x86 ...

  2. [bzoj4131]并行博弈_博弈论

    并行博弈 bzoj-4131 题目大意:题目链接. 注释:略. 想法:我们发现无论如何操作都会使得$(1,1)$发生改变. 所以单个$ACG$的胜利条件就是$(1,1)$是否为黑色. 如果为黑色那么可 ...

  3. Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数

    Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...

  4. list循环删除单个元素

    摘自https://www.cnblogs.com/pcheng/p/5336903.html JAVA中循环删除list中元素的方法总结 JAVA中循环遍历list有三种方式for循环.增强for循 ...

  5. Servlet实现页面重定向

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/page-redirect.html: 当文档移动到一个新的位置时,通常会使用页面重定向,需要将客 ...

  6. dstat用法;利用awk求dstat所有列每列的和;linux系统监控

    安装:yum install -y dstat dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具.与sys ...

  7. dataTables 添加行内操作按钮

    在上一篇博客中我们提到了用dataTables 做一个分页表格.今天进一步进阶,做一个行内带操作按钮的表格.效果如图. 记得最基础的实现方式是,我们要在js 中拼接字符串,嵌入一个带按钮的语句.但是现 ...

  8. Setting up Storm and Running Your First Topology

    http://www.haroldnguyen.com/blog/2015/01/setting-up-storm-and-running-your-first-topology/ --------- ...

  9. Python学习系列之文件操作

    Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的 ...

  10. cisco PIX

    来自为知笔记(Wiz)