`
lt200819
  • 浏览: 188071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 动态类型安全

    博客分类:
  • JAVA
阅读更多

        动态类型安全主要是在泛型容器中遇到的。因为可以向JAVA EE5 之前的代码传递泛型容器,所以旧式代码仍旧有可能会破坏你的容器,JAVA EE5的java.util.Collections中有一组便利工具,可以解决在这种情况下的类型检查问题,它们是:静态方法checkedCollection()、checkedList()、checkedMap()、checkedSet()、checkedSortedMap()和checkedSortedSet()。这些方法每一个都会将你希望动态检查的容器当作第一个参数接受,并将你希望强制要求的类型作为第二个参数接受。

        受检查的容器在你视图插入类型不正确的对象时会抛出ClassCastException异常,而不是在你将对象从容器中取出时才会通知你出现了问题。

Java代码  收藏代码
  1. public class CheckedList{
  2.    @SuppressWarnings("unchecked")
  3.    static void oldStyleMethod(List probablyDogs){
  4.        probablyDogs.add(new Cat());
  5.    }
  6.     public static void main(String[] args){
  7.         List<Dog> dogs1 = new ArrayList<Dog>();
  8.         oldStyleMethod(dogs1);
  9.         List<Dog> dogs2 = Collections.checkedList(
  10.            new ArrayList<Dog>(),Dog.class);
  11.         try{
  12.            oldStyleMethod(dogs2);
  13.         }catch(Exception e){
  14.            e.printStack();
  15.         }
  16.         List<Pet> pets = Collections.checkedList(new ArrayList<Pet>(),Pet.class);
  17.         pets.add(new Dog());
  18.         pets.add(new Cat());
  19.     }
  20. } 


运行这个程序时,你会发现插入一个Cat对于dogs1来说没有任何问题,而dogs2立即会在这个错误类型的插入操作上抛出一个异常。还可以看到,将子类的对象放置到将要检查基类型的受检查容器是没有问题的。
   

分享到:
评论

相关推荐

    java 强制类型转换示例

    在Java编程语言中,强制类型转换是将一个数据类型转换为另一个兼容的数据类型的过程。这通常发生在处理不同类型的变量或对象之间需要交互的情况。在Java中,有两种类型的转换:自动类型转换(隐式转换)和强制类型...

    基于Java平台安全性的分析与研究.pdf

    Java语言本身提供了类型安全、异常处理、访问控制等安全特性来避免编程错误或恶意代码的侵入。API的安全性保证了开发者可以利用Java平台提供的安全功能来增强应用程序的安全性。安全策略则是定义如何执行权限检查和...

    可热插拔的Java类型检查

    "可热插拔的Java类型检查"指的是能够在程序运行时动态添加或移除类型检查机制的技术,它允许开发者在不重启应用的情况下增强静态类型检查,从而提高代码质量。这种技术主要依赖于Java的类型注解(Type Annotations)...

    Java编程的动态性

    - **类型安全检查**:反射操作会在运行时进行类型安全检查,而直接调用则在编译时完成。 - **性能开销**:反射涉及大量的运行时查询,这可能会导致性能下降。 因此,在设计系统时需要仔细权衡反射带来的灵活性和...

    Java安全手册

    这本手册详细阐述了如何在开发Java应用时确保代码的安全性,防止各种类型的攻击,包括但不限于注入攻击、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。在当今网络环境中,随着黑客技术的不断发展,开发安全的软件...

    java程序中加载动态链接库文件

    通过JNI,Java可以调用外部的动态链接库或静态库中的函数,并能够访问这些库中的数据类型和结构。 #### 三、加载动态链接库的过程 1. **声明Native方法**:在Java代码中声明native方法,这些方法只定义了方法签名...

    java动态特性eval

    这种方式可以实现动态编译和执行Java代码,但它需要处理语法解析、异常处理和类型检查等复杂问题。 4. **表达式求值库**: 有一些第三方库,如`JEXL (Java Expression Language)`或`Ognl (Object-Graph Navigation...

    java 调用C++ 动态库

    总结来说,Java调用C++动态库是一个涉及多步骤的过程,包括生成JNI头文件、编写C++代码、编译动态库、加载库并在Java中调用本地方法。这个过程中需要考虑线程安全、数据类型转换以及异常处理等问题,以确保程序的...

    基于沙箱的Java安全体系结构

    2. **类型数据验证**:在连接过程中进行,确保类的数据类型符合Java语言语义。 3. **字节码验证**:同样在连接过程中进行,验证字节码的完整性和正确性,确保它们不会违反Java语言的规则。 4. **符号引用解析**:在...

    JAVA 2平台安全技术-结构,API设计和实现

    2.3 字节代码验证和类型安全 14 2.4 签名应用小程序 15 2.5 关于安全错误及其修复的简要历史 16 第3章 JDK1.2安全结构 19 3.1 起源 19 3.2 为什么需要一个新型的安全结构 19 3.2.1 关于applet的沙盒模型的局限性 19 ...

    java通过文件头内容判断文件类型

    总的来说,通过Java读取文件头内容判断文件类型是一种实用的技术,尤其在处理未知或不安全的文件时。理解并掌握这个方法,能够帮助我们在实际开发中更好地处理各种文件操作,提高程序的健壮性和安全性。

    java动态修改IP程序

    7. **跨平台兼容性**:由于不同操作系统处理网络接口的方式不同,一个动态修改IP的Java程序需要考虑到这一点,可能需要根据操作系统类型采用不同的实现策略。 在"DynamicSetIp"这个项目中,可能包含了实现上述功能...

    java动态性.rar

    泛型在集合框架中的应用是其动态性的一个体现,因为它们允许在运行时安全地存储不同类型的元素。 6. Lambda表达式与函数式编程:Java 8引入了Lambda表达式,增强了函数式编程的支持。Lambda可以作为参数传递,也...

    java泛型、原始类型、桥接方法

    Java 泛型是 Java 语言中的一种重要特性,用于在编译时检查类型安全性,避免 ClassCastException 的出现。下面将详细介绍 Java 泛型、原始类型和桥接方法。 Java 泛型 Java 泛型的本质是编译器“耍了个花招”,...

    浅谈Java模型以外的类型策略

    泛型提供了一种在编译时处理类型的方式,而反射允许在运行时检查和操作类的结构,动态代理则能实现接口的动态实现,这些技术可以帮助开发者在保持类型安全的同时,增加代码的灵活性和适应性。 总的来说,选择静态...

    2022年Java语言的接口与类型安全Java教程.docx

    Java 语言中的接口和类型安全是编程的核心概念,对于理解Java编程模型至关重要。首先,接口(Interface)是Java中用于实现多继承的一种机制,它定义了一组方法的签名,但不包含任何实现。接口的主要作用是提供契约,...

    JPA_2.0_中的动态类型安全查询

    随着Java Persistence API (JPA) 2.0版本的发布,Java开发者们迎来了一个新的里程碑:动态类型安全查询。这一特性不仅提高了代码的安全性和健壮性,还简化了查询构造的过程。在JPA 2.0中,Criteria API成为了实现...

    Java反序列化安全漏洞防控

    Java反序列化安全漏洞是一种严重的安全威胁,它主要发生在Java程序处理序列化数据时。序列化是Java中的一种机制...只有通过不断的关注安全动态、实施有效的防御措施以及定期更新和打补丁,才能确保Java应用的安全运行。

    全面掌握java枚举类型(enum-type)1

    枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 背景 在 Java 语言中,没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有 int 常量。这种方式...

    Java参数类型的多态研究.pdf

    这既保持了Java的类型安全性,又避免了引入全新的语言概念,使得泛型能够无缝地融入现有的类层次结构。 例如,我们可以声明一个泛型类`ArrayList&lt;T extends Comparable&lt;T&gt;&gt;`,这意味着ArrayList可以存储任何实现了...

Global site tag (gtag.js) - Google Analytics