`
liltos
  • 浏览: 7740 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java 泛型警告

阅读更多

系统框架:一棵"命令"树,一棵"数据"树,命令树的根,即顶端元素是一个抽象类或接口,对外提供一个 execute 方法,但是这个方法的返回类型会因为命令的不同而不同,在这里举两个个实例,以学生选课来说。
  命令一、学生选的课的列表 GetMyCourseCommand 命令的 execute() 方法应返回一个 List。
  命令二、是不是选了某一个课程 CourseIsSelectedCommand 命令的 execute() 方法返回一个 Boolean。
这样的话,我的接口会定义成:
public interface Comamnd<T>{
     public T execute();
}

由于我不想让客户端知道自己到底调用了哪一个命令,于是写一个工厂来生产 Command,由于是工厂,所以 getCommand() 方法将被设置成 static 的,很简单,我犯不着每次想得到一个 Command 都创建一个 Factory 对象。
这样,客户端要做的,就是根据需求创建不同的 Data 对象,并将 data 对象传入工厂方法,刚才提及的 getCommand() 的完整定义是
public static Command getCommand(Data d);


至此,客户端在处理上述例子时对应应该做的就是:
  例子一、
        Data d = new GetMyCourseData(params...);
        Command<List> cmd = CommandFactory.getCommand(d);
        List<Course> list = cmd.execute();


  例子二、
        Data d = new CourseIsSelectedData(params...);
        Command<Boolean> cmd = CommandFactory.getCommand(d);
        boolean isSelected = cmd.execute();



客户端好像挺清晰的,但是 Java 的泛型却提示了警告,在中间那行生产Command对象的代码那。

试过N多方法,除了 new 一个工厂对象出来,并将 getCommand 改为成员方法外,都无法消除这个警告。当然,我也不确定这个做法是不是有点设计过度 :-(

这个警告能消除吗?


<怎么预览的时候代码多个几个?>
分享到:
评论
9 楼 ecsoftcn 2007-04-17  
hbcui1984 写道
我也问一下,有一个这样的方法:
	public List toList(String[] strArray){
		return Arrays.asList(strArray);
	}

然后通过如下方式调用:
List<String> list = (List<String>)toList(new String[5]);

为什么总有告警,能消除吗?


public <T> List<T> toList(T[] array){
    return Arrays.asList(array);
}
8 楼 hbcui1984 2007-04-17  
jfy3d 写道
List<String> list = toList(new String[5]);

    public List<String> toList(String[] strArray) {
        return Arrays.asList(strArray);
    }

idea里自动转换的

呵呵,谢谢,我也突然想明白
7 楼 maxima 2007-04-17  
ls
public List<String> toList(String[] strArray){  
    return Arrays.asList(strArray);  


方法返回类型声明范型,List<T>赋值给同类型变量就不会有强制转换的警告了
6 楼 jfy3d 2007-04-17  
List<String> list = toList(new String[5]);

    public List<String> toList(String[] strArray) {
        return Arrays.asList(strArray);
    }

idea里自动转换的
5 楼 hbcui1984 2007-04-17  
我也问一下,有一个这样的方法:
	public List toList(String[] strArray){
		return Arrays.asList(strArray);
	}

然后通过如下方式调用:
List<String> list = (List<String>)toList(new String[5]);

为什么总有告警,能消除吗?
4 楼 liltos 2007-04-17  

今天把书看了一下,此题是有解的。上次在写这个代码的时候因时间关系没好好看书,不应该呀不应该。
解决方法如下:
public static <T> Command<T> getCommand(Data d);

调用方法如前。
3 楼 liltos 2007-04-12  
看来此题无解只能加 unchecked 了
2 楼 dustinth 2007-04-12  
因为Factory在Compile期间不能保证出来的Command能Match Command<List>所以是Warning.
1 楼 生命火花 2007-04-12  
JavaVision 写道
把泛型语法多看看.

java的"泛型" 是静态的, 只要带到new方面的,应该都不行的.



那为什么 Collection<T> col = new ArrayList<K,V>() 是可以的

相关推荐

    java 泛型入门 实例

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了代码的类型安全性和重用性。本篇文章将带你入门Java泛型,通过实例深入理解其核心概念。 1. **泛型的基本概念** - 泛型...

    Java泛型实例

    Java泛型是Java编程语言中的一个重要特性,它在2004年随着Java SE 5.0的发布而引入。这个特性允许程序员在定义类、接口和方法时声明类型参数,从而增强了代码的类型安全性和重用性。通过使用泛型,我们可以编写更加...

    java 泛型

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入。泛型允许程序员在代码中使用类型参数,从而增加了代码的类型安全性和重用性。它能够帮助我们避免在运行时出现ClassCastException...

    Java1.5泛型指南中文版

    感谢所有为Java泛型做出贡献的人们,包括设计者、实现者以及提供反馈和支持的社区成员。泛型是Java语言的一个重要特性,极大地提高了代码的质量和可维护性。 以上就是基于给定文件信息对Java 1.5泛型指南的主要知识...

    java泛型的使用

    3. **潜在的性能收益**:虽然Java泛型的初始实现并未直接提升运行时性能,但其为编译器提供了更多的类型信息,为未来JVM的优化提供了可能性。例如,编译器可能能够更有效地处理泛型代码,减少运行时的检查。 4. **...

    java 泛型基础简单事例

    Java 泛型是Java编程语言中的一个重要特性,它在Java SE 5.0版本中引入,极大地提高了代码的类型安全性和重用性。泛型允许我们在定义类、接口和方法时,使用一种类型参数,而不是具体的类型。这样做的好处在于,我们...

    Java泛型文章原代码

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了类型安全性和代码可读性。泛型允许我们在编写类、接口和方法时指定一种或多种类型,使得编译器能够检查代码中对象的类型...

    Java泛型继承原理与用法详解

    Java泛型是自Java 5版本引入的一种强大的类型系统特性,它允许我们在编程时指定容器(如列表、集合等)所存储的数据类型。这增强了代码的类型安全性,减少了强制类型转换,并提供了更好的编译时错误检测。在Java中,...

    Java泛型资料

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了类型安全性和代码可读性。泛型允许程序员在定义类、接口和方法时指定类型参数,使得在编译时期就能检查类型错误,而不再...

    Java1.5泛型指南中文版.doc

    感谢所有为Java泛型设计做出贡献的人们,他们的工作极大地提高了Java语言的灵活性和安全性。 以上是对Java 1.5泛型指南中文版的一些核心概念和关键知识点的总结。这些知识点涵盖了从基础到高级的泛型使用技巧,对于...

    Java5.0泛型编程

    Java5.0泛型编程是Java开发中的一个重要里程碑,它引入了一种强大的类型系统机制,大大增强了代码的类型安全性,并减少了在编译期间和运行时出现的类型转换错误。这一特性使得开发者能够在编写代码时就能明确指定...

    Java1_5泛型.zip

    Java 1.5 泛型是Java编程语言中的一项重要特性,它于2004年发布,极大地提升了代码的类型安全性和可读性。泛型允许开发者在类、接口和方法中使用类型参数,从而在编译时就能检查类型错误,避免了运行时的类型转换...

    无涯教程(LearnFk)-Java-泛型教程离线版.pdf

    Java泛型是Java编程语言的一个重要特性,允许在编译时期提供类型安全,确保不同类型的对象在集合中独立存在,避免了类型转换错误。泛型的主要目的是减少类型转换,提供编译期类型检查以及消除类型安全警告。Java泛型...

    java不支持创建泛型数组(1)

    在Java编程语言中,"java不支持创建泛型数组(1)"这个标题揭示了一个重要的概念,即Java不直接允许我们创建带有类型参数的泛型数组。这是因为Java的泛型是类型擦除的,这意味着在编译后,所有的泛型信息都会被移除,...

    泛型集合(动态添加按纽)

    当我们尝试将不兼容的类型放入泛型集合时,编译器会立即发出警告。 2. 性能提升:由于泛型集合不需要在运行时进行类型检查和转换,因此在处理大量数据时,它们通常比非泛型集合更快。 3. 易于使用:泛型集合提供了...

    java除去类里面的黄色警告

    例如,对于泛型警告,可以尝试使用更具体的数据类型;对于过时API的警告,可以查找并应用更新的替代API;对于序列化警告,可以显式地定义`serialVersionUID`。通过这种方式,不仅可以消除警告,还能提高代码的质量...

    大学课程讲义-Java基础-泛型.docx

    Java泛型是Java编程语言中的一种特性,它允许在数据结构(如集合)中存储特定类型的元素,从而提供了编译时的类型安全性和更清晰的代码。泛型引入的主要目标是消除强制类型转换的需要,减少类型转换带来的潜在错误,...

    Java泛型的概念、定义与运行方法分析

    Java泛型是一种编程技术,它提供了编写代码时对数据类型进行参数化的机制。泛型的关键概念包括类型形参和类型实参。类型形参是在定义类、接口时使用的占位符,它在声明变量或创建对象时需要被实际的类型参数(类型...

Global site tag (gtag.js) - Google Analytics