首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java的学习笔记(12)对象 七

; 运行没有问题 父类的引用指向子类转另一个子类对象 Parent parent = new Son(); Daughter daughter = (Daughter) parent; 运行时报出 ClassCastException...//也可以理解为将一个子类的对象转化为父类的对象(隐形转型,自动的),小类转大类 Person one = new Person(); one.run(); Person...// 向下转型,必须强转 //类型之间的的转化 :父转子,向下转换要强制转换,也就是父类转为子类要强转 Person obj = new Student(); // obj.go...() 会报错, obj是父类Person对象实例,需要将obj转换为Student类型,才可以使用Student类型的方法 Student student = (Student) obj;...父类引用指向子类的对象 2. 把子类转换为父类,向上转型,直接转; 3. 把父类转换为子类,向下转型,强制转换; 4. 方便方法的调用,减少重复的代码,简洁 */ } }

47130

java对象转换map

大家好,又见面了,我是你们的朋友全栈君。...背景介绍 原理说明 反射概念 功能作用 实现方式 方法介绍 实例展示 对象转MAP 背景介绍   今天在项目研发的过程中遇到这样一个需求,在一个统一处理类的入口要将所有后面处理流程需要用到的值统一塞进上下文的...原理说明 反射概念 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为...功能作用 在运行时可以动态获取一个对象属于哪个类 在运行时可以动态创建一个类的对象 在运行时可以获取类的属性和方法 在运行时可以调用对象的任何方法 可以实现动态代理 实现方式...实例展示 参考实例 反射实例链接 对象转MAP 创建测试对象 package source.reflect; public class TestReflect { private

88710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    什么是泛型?- 泛型入门篇

    泛型其实就是将类型作为参数传递,泛型允许程序员在编写代码时使用一些以后才指定的类型 ,在实例化该类时将想要的类型作为参数传递,来指明这些类型。 为什么要引入泛型?...,我们只能添加 int 类型的元素,我们知道java集合中的顺序表,可以添加任何类型的数据,怎么实现的呢?...这里我们先尝试将 int 类型变为Object类型,这样就可以保证能传入任何类型。...但是,当需要取出数据时,因为返回的是Object类型,需要进行强转才能用相对应的类型来接收,非常麻烦。...这时候我们就想到在创建一个实例对象时,可以将想要的类型作为参数传递,让这个对象中全部存传入的类型的数据,那么拿出来的时候,就可以明确该对象中所有的数据都是该类型,不需要强转了。这就引入了泛型。

    42720

    (37) 泛型 (下) - 细节和局限性 计算机程序的思维逻辑

    这些局限性主要与Java的实现机制有关,Java中,泛型是通过类型擦除来实现的,类型参数在编译时会被替换为Object,运行时Java虚拟机不知道泛型这回事,这带来了很多局限性,其中有的部分是比较容易理解的...基本类型不能用于实例化类型参数 Java中,因为类型参数会被替换为Object,所以Java泛型中不能使用基本数据类型,也就是说,类似下面写法是不合法的: Pair minmax = new...数组是Java直接支持的概念,它知道数组元素的实际类型,它知道Object和Number都是Integer的父类型,所以这个操作是允许的。...)Arrays.copyOf(elementData, size); } 结果都是一样的,没有编译错误了,但运行时,会抛出ClassCastException异常,原因是,Object类型的数组不能转换为...Java必须在运行时知道你要转换成的数组类型,类型可以作为参数传递给toArray方法,比如: public E[] toArray(Class type){ Object copy =

    92760

    Java 获取 Object 中的 Value:深入解析与实战

    常见获取值的场景多态性:在方法中接收 Object 类型参数,通过类型转换获取具体值。泛型:处理泛型类和方法时,获取泛型参数中的具体值。反射:动态获取对象中的字段值,尤其是在不知道对象类型的情况下。...Java 提供了多种方法从 Object 中获取值,包括:强制类型转换:通过显式转换将 Object 转换为具体类型。instanceof 判断:在类型转换前使用 instanceof 进行类型检查。...反射:通过反射机制动态获取对象的字段值。接下来,我们将深入讨论这些方法及其实现。源码解析1. 强制类型转换最直接的方式是使用强制类型转换,将 Object 类型转换为目标类型。...String value = (String) obj;:如果 obj 是 String 类型的实例,将其强制转换为 String 类型。...Object obj = person;:将 Person 实例赋值给 Object 类型的变量 obj。

    22732

    Java泛型

    ();b.set(new Apple());但是当你取出来的时候,是一个水果啊,你不知道是苹果还是香蕉,需要强转类型:Apple a = (Apple) b.get(); // 强转,可能出现ClassCastException...我们不知道使用者会替换成什么类型,所以用T表示。而实际类型参数Apple是在实例化Box时实际替换类型参数T的类型。它给T一个明确的类型,用于这次实例化。...这时候静态方法已经创建完了,无法使用这个实际类型,所以编译器不允许这么做。2)类型擦除就是编译器删除所有与类型参数相关的信息,并替换为上限(通常是Object类型)的过程。...类型擦除有利有弊,好处是可以在1.5之前的VM上运行泛型代码,坏处是导致些许运行期间的效率损失,因为擦除后所有的类型参数都被替换为Object类型。不过这点性能损失在大部分情况下可以忽略。...谢谢你将这些泛型的概念讲解的如此清晰和深入,我对泛型也有了更全面的认识。真是一个非常愉快的交流过程!候选人: 非常高兴能帮到您!

    18030

    泛型

    为什么使用泛型 使用泛型可让编写的代码对多种不同类型的对象重用(笔者理解为与方法的重载互补),比如你希望某个方法foo() 可接收多种参数来进行处理而不用为这多个参数各写一个方法,当然可用Object作为参数...,但使用Object作为方法参数有两个缺点: 获取其中的值时需要强制类型转换 没有错误检查,可接收任何类型参数,导致强制转换可能报错 还有就是使用泛型了,ArrayList就是典型的例子,其中的arrayList.add...什么是泛型 泛型里有个专有名词叫类型参数,就是把类型也当作一个参数,但它是一个不确定类型的特殊类型,它在使用时才明确类型,这样的好处: 不用代码强转 把运行问题提前到了编译时期 3....user2 = new User(); list.add(user1); list.add(user2); // 若把非User类型放入集合,这样只有运行时报错才知道 for(Object user...super E> list) {} // 只能限定一个实例,但可以多个接口 // 默认使用第一个,所以习惯在E的位置放入实例对象类型,而非接口 public void foo(List<?

    59010

    《面试1v1》Java泛型

    ();b.set(new Apple());但是当你取出来的时候,是一个水果啊,你不知道是苹果还是香蕉,需要强转类型:Apple a = (Apple) b.get(); // 强转,可能出现ClassCastException...我们不知道使用者会替换成什么类型,所以用T表示。而实际类型参数Apple是在实例化Box时实际替换类型参数T的类型。它给T一个明确的类型,用于这次实例化。...这时候静态方法已经创建完了,无法使用这个实际类型,所以编译器不允许这么做。2)类型擦除就是编译器删除所有与类型参数相关的信息,并替换为上限(通常是Object类型)的过程。...类型擦除有利有弊,好处是可以在1.5之前的VM上运行泛型代码,坏处是导致些许运行期间的效率损失,因为擦除后所有的类型参数都被替换为Object类型。不过这点性能损失在大部分情况下可以忽略。...谢谢你将这些泛型的概念讲解的如此清晰和深入,我对泛型也有了更全面的认识。真是一个非常愉快的交流过程!候选人: 非常高兴能帮到您!

    19730

    .NET 设计一套高性能的弱事件机制

    要支持所有类型的 CLR 事件,意味着我的设计中必须要能够直接监听到任意事件,而不能所有代码都从我自己编写的代码开始。...因为我希望为任意 CLR 事件添加弱事件支持,所以其职责有点像“代理、中间人、中继、中转”,对应英文的 Proxy Agent Relay Transfer。...庆幸的是,C# 提供了将方法组隐式转换委托的方法,可以让两个参数和返回值类型相同的委托隐式转换。但注意,这是隐式转换,没有运行时代码可以高性能地完成这件事情。...这意味着,我们可以将 value.Invoke 传入来以通用的方式调用事件处理函数。但是请特别注意,这会导致新创建委托实例,导致 -= 的时候实例与 += 的时候不一致,无法注销事件。...因为弱事件的实现并不简单(看上面如此复杂的公开 API 就知道了),如果能够直接访问,势必带来更复杂的使用问题。所以我仅在部分方法和 Lambda 表达式参数中开放实例。

    23620

    上新了Spring,全新一代类型转换机制

    职责不单一:该接口有非常多的方法,但只用到2个而已 类型不安全:setValue()方法入参是Object,getValue()返回值是Object,依赖于约定好的类型强转,不安全 线程不安全:依赖于setValue...()后getValue(),实例是线程不安全的 语义不清晰:从语义上根本不能知道它是用于类型转换的组件 只能用于String类型:它只能进行String 其它类型的转换,而非更灵活的Object...这套接口,解决了PropertyEditor做类型转换存在的所有缺陷,且具有非常高的灵活性和可扩展性。下面进入详细了解。 Converter 将源类型S转换为目标类型T。...适合1:1转换场景:可以将任意类型 转换为 任意类型。...,适用于1:1转换 ConverterFactory:Source -> R类型转换接口,适用于1:N转换 GenericConverter:更为通用的类型转换接口,适用于N:N转换 下篇文章将针对于

    91620

    Java核心技术第八章-泛型

    Employee buddy = buddies.getFirst(); 擦除getFirst的返回类型后将返回Object类型,但是编译器将自动帮我们强制类型转换为Employee。...所以:编译器把这个方法执行操作分为两条指令: 对原始方法Pair.getFirst的调用 将返回的Object类型强制转换为Employee类型 小节总结: 虚拟机中没有泛型,只有普通的类和方法...原因是因为基本数据类型是不属于Object的。所以只能用他们的包装类型替换。 运行时类型查询只适用于原始类型 所有的类型查询只产生原始类型,因为在虚拟机没有所谓的泛型类型。...因为类型擦除后,T将变成Object,而且我们肯定不是希望实例化Object。...> pair) { return pair.getObject() == null; } 说实话,通配符搞得我头昏脑胀的,反复不断地看文章,才开始慢慢看懂,我太难了。。。

    89210

    iOS-RunTime,不再只是听说

    RunTime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。...(ivar)]; 判断当一级字典中的value是字典,并且一级模型中的成员属性类型不是NSDictionary的时候才需要进行二级转化。...首先value是字典才进行转化是必须的,因为我们通常将字典转化为模型,其次,成员属性类型不是系统类,说明成员属性是我们自定义的类,也就是要转化的二级模型。...[propertyType containsString:@"NS"]) { // 进行二级转换 // 获取二级模型类型进行字符串截取,转换为类名...---- 文中如果有不对的地方欢迎指出。我是xx_cc,一只长大很久但还没有二够的家伙。

    1.3K70

    【Java 基础 - 泛型机制详细解释】

    这种方法可以解决开始遇到的问题,编译器知道类型参数的范围,如果传入的实例类型B是在这个范围内的话允许转换,这时只要一次类型转换就可以了,运行时会把对象当做A的实例看待。...(Type Erasure),将所有的泛型表示(尖括号中的内容)都替换为具体的类型(其对应的原生态类型),就像完全没有泛型一样。...擦除类定义中的类型参数 - 无限制类型擦除 当类定义中的类型参数没有任何限制时,在类型擦除中直接被替换为Object,即形如和的类型参数都被替换为Object。...extends Number>的类型参数被替换为Number,被替换为Object。...再说,你如果又用list2往里面add()新的对象,那么到时候取得时候,我怎么知道我取出来的到底是String类型的,还是Object类型的呢? 所以,要格外注意,泛型中的引用传递的问题。

    53910

    用通俗易懂的英语解释 pinning

    我通过写这篇文章试着让这一功能更易于使用,希望能激励更多的开发人员让他们的 crate 知道 pinning 在哪里会有帮助。 ---- 许可和翻译 请参阅本帖末尾之后的内容。...请注意,我在不同位置添加了 Rust 文档的链接。这些都是“进一步的阅读材料”,所以我建议在研究它们之前阅读完这整篇文章。通过这种方式,(希望)它们会更容易理解。...然而,与 C++ ( 1, 2, 3, 4 ) 不同的是,Rust 没有内置机制来更新实例所有者不直接知道的指针和地址,或者完全阻止特定类型的移动:你不能重载或删除普通赋值操作符 =,也不存在当实例被隐式移动时可以调用的...根本不需要运行时操作。 将指针或容器转换为 pinning 版本之后操作同样自由 (free action) 。...很抱歉这里的许可复杂,不幸的是我(原作者)的国家几乎不承认合理使用。 如果你翻译了这篇文章,请让我知道,这样我就可以链接到这里。我应该很快就能自己贴出德文翻译了。

    1K10

    instanceof,isInstance,isAssignableFrom区别是什么?

    同时我们使用String对象测试的时候,发现对象既是String的实例,也是Object的实例,也印证了Java里面所有类型都默认继承了Obejct。...这个答案是:不知道什么类型,因为null可以转换成为任何类型,所以不属于任何类型,instanceof结果会是false。...如果S是表示数组类型SC的类[],即类型SC的组件数组,则: TC和SC是相同的原始类型。 TC和SC是引用类型,类型SC可以通过这些运行时规则转换为TC。...如果T是一个类型为TC的数组[],即一个类型为TC的组件数组,那么下列其中一个必须为真: TC和SC是相同的原始类型。 TC和SC是引用类型,类型SC可以通过这些运行时规则转换为TC。...这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。 此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。

    72410

    【Java 进阶篇】深入理解 Jackson:Java 对象转 JSON 的艺术

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,而 Jackson 作为一个强大的 JSON 解析库,能够帮助我们将 Java 对象高效地转换为 JSON 格式的字符串...通过这篇博客,我将带你深入了解 Jackson 的 Java 对象转 JSON 的过程,并通过实例代码演示每个步骤。让我们一起探索这项艺术吧! 什么是 Jackson?...Jackson 不仅在 Java 后端开发中广泛应用,而且由于其灵活性和性能优势,它的 JavaScript 版本也成为了前端开发的热门选择。...通过调用 writeValueAsString 方法,我们将 Person 对象转换为 JSON 字符串。输出结果应该是类似于 {"name":"John Doe","age":30} 的字符串。...希望这篇博客对你有所帮助,让你在 Java 对象转 JSON 的道路上更加得心应手!

    1.4K10

    Java 多态的实现机制

    转自:博客园,作者:crane_practice 链接: www.cnblogs.com/crane-practice/p/3671074.html 是父类或接口定义的引用变量可以指向子类或实现类的实例对象...,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。...(ArrayList list); 这样声明最大的好处在于结构的灵活性:假如某一天我认为ArrayList的特性无法满足我的要求,我希望能够用LinkedList来代替它,那么只需要在对象创建的地方把new...注意这里只有非私有的实例方法才会出现,并且静态方法也不会出现在这里,原因很容易理解:静态方法跟对象无关,可以将方法地址直接引用,而不像实例方法需要间接引用。...虚拟机通过对象引用得到方法区中类型信息的入口,查询类的方法表,当将子类对象声明为父类类型时,形式上调用的是父类方法,此时虚拟机会从实际类的方法表(虽然声明的是父类,但是实际上这里的类型信息中存放的是子类的信息

    63410

    带着问题高效学Android:关于Java与Kotlin泛型你应该知道的知识点

    在如上的编码过程中,我们发现主要存在两个问题: 1.当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型...因为Java中的泛型是利用泛型擦除实现的,目前还有以下局限性: 1.不能用基本类型实例化类型参数 2.运行时类型查询只适用于原始类型 3.泛型类的静态上下文中类型变量失效 4.不能创建参数化类型的数组...因为泛型是要在对象创建的时候才知道是什么类型的,而对象创建的代码执行先后顺序是static的部分,然后才是构造函数等等。...不知道,但是可以肯定的说,Object一定是它的超类,所以get方法返回Object。编译器是可以确定知道的。对于set方法来说,编译器不知道它需要的确切类型,但是X和X的子类可以安全的转型为X。...但是也因为有无限的可能性,就只有程序员和运行期的虚拟机才知道这个Object到底是个什么类型的对象。

    1.1K00

    如何快速编写和调试 Emit 生成 IL 的代码

    之前我写过一篇创建委托以大幅度提高反射调用的性能的方法,不过此方法适用于预先知道方法参数和返回值类型的情况。如果我们在编译期不知道类型,那么它就行不通了。(原因?...注意到那篇文章中返回的委托有类型强转吗?也就是说需要编译期确定类型,即便是泛型。)...例如,我们在运行时得到一个对象,希望为这个对象的部分或全部属性赋值;此对象的类型和属性类型在编译期全部不可知(就算是泛型也没有)。...为了实现动态地设置未知类型未知属性的值,我决定写出如下方法: static void SetPropertyValue(object @this, object value) { ((类的类型...方法是一个静态方法,传入两个参数——类型的实例和属性的新值;方法内部为实例中某个属性赋新值。

    1.6K10

    反射相关

    简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。...所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。  反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。...、在运行时调用任意一个对象的方法 注意:是在运行时而不是编译时、 Java反射机制是在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及调用对象的方法的功能成为...熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。...,它是一个Native方法 public native boolean isInstance(object obj); 创建实例 通过反射生成实例有两种方式: (1)使用Class对象的newInstance

    14810
    领券