我通常是一名C#开发人员,刚接触Java,我正在尝试使用Generics设置一些代码.我的演示代码如下所示:

// Main.java

public static void main(String[] args) {

MyBase my = getMeStuff();

System.out.println(my.getSomething());

}

private static T getMeStuff(){

return new MyDerived(123);

}

// MyBase/MyDerived.java

public class MyBase {

private final int something;

protected MyBase(int something) { this.something = something; }

public int getSomething() { return something; }

}

public class MyDerived extends MyBase {

public MyDerived(int something) { super(something); }

}

这无法编译:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

Type mismatch: cannot convert from x.MyDerived to T

at x.Main.getMeStuff(Main.java:14)

at x.Main.main(Main.java:9)

如上所述,我通常是C#开发人员,所以代码看起来很乍一看.我可以通过改变getMeStuff来“解决”这个错误,将一个强制转换添加到(T),但是该强制转换是否真的有必要?它闻起来有点像我忘了什么?

解决方法:

问题是返回类型可以是从MyBase派生的任何内容,并且您专门将其键入MyDerived,即使没有强制转换也不能在C#中使用.调用者可以指定SomeOtherDerived,它也来自MyBase,但与MyDerived无关.

public class MyBase{}

public class MyDerived extends MyBase{}

public class SomeOtherDerived extends MyBase{}

public static T getAnything(){ return (T)new MyDerived(); }

public static void main(String[] args) {

SomeOtherDerived instance = getAnything(); //This is legal and bad

}

同样重要的是要注意,即使使用强制转换,这也是一件非常糟糕的事情,并且在使用未明确提供的任何类型调用时很容易导致运行时异常.这也违背了泛型的概念,将非常具体的类型归结为应该是一般化的情况.

标签:java,generics

来源: https://codeday.me/bug/20190530/1183446.html

java中 t无法对齐,java – 即使X应匹配T,也无法将X转换为T?相关推荐

  1. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  2. 在java中使用JMH(Java Microbenchmark Harness)做性能测试

    文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 ...

  3. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  4. java中函数的调用,java中如何调用函数

    java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...

  5. Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决

    Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决 参考文章: (1)Java中使用json时java.lan ...

  6. java按两列输出_有没有一种简单的方法可以将两列输出到Java中的控制台? - java...

    如标题所述,是否有一种简单的方法可以将两列输出到Java中的控制台? 我知道\t,但是在使用printf时,我还没有找到基于特定列进行空间分配的方法. 参考方案 使用宽度和精度说明符,将其设置为相同的 ...

  7. java中hashcode_浅谈Java中的Hash值

    1.Hash值有什么用? HashMap.HashTable.HashSet,所以涉及到使用Hash值进行优化存储的地方,都会用到HashCode.HashCode是Key,这种计算为提高计算的性能. ...

  8. java中的action_浅析java中action的作用

    正如早先指出的那样,action()并不是我们对所有事进行分类后自动为handleEvent()调用的唯一方法.有三个其它的被调用的方法集,如果我们想捕捉某些类型的事件(键盘.鼠标和焦点事件),因此我 ...

  9. 在java中表示json_在Java中解析JSON而不知道JSON格式

    我试图解析在Java中的JSON字符串,并找到键值对,使我可以确定JSON对象的近似结构,因为JSON字符串的对象结构是未知的. 例如,一个执行可能有一个JSON字符串,如下所示: {"id ...

  10. JAVA中throw用法例子,Java Optional orElseThrow()用法及代码示例

    Java中的java.util.Optional类的orElseThrow()方法用于获取此Optional实例(如果存在)的值.如果此Optional实例中不存在任何值,则此方法将引发从指定供应商生 ...

最新文章

  1. Windows平台九点提升权限终极技巧
  2. 82.开始→运行→输入的命令集锦
  3. java8 streams_Java 8 Streams:过滤和谓词否定
  4. android监控指纹信息变化,android监听指纹变化(解决反射思路在android10不生效的问题)...
  5. python闭包怎么理解_Python 闭包的理解
  6. 计算机操作系统 内存_计算机内存的类型| 操作系统
  7. winform 统计大量数据重复的元素个数_DAY10——推断统计之概率与概率分布:常见的离散型概率分布...
  8. 实践证明,SQL Server 2000 + 2005 + 2008,完全可以共存
  9. [Luogu 3835]【模板】可持久化平衡树
  10. 安装操作系统的过程图解
  11. 使用委托(事件)或中介设计模式实现多个Windows窗体文本框的同步
  12. 关于Django的搭建
  13. OCR之Tesseract使用
  14. js复制隐藏域中的文字
  15. 设置360极速浏览器的模式默认为极速模式
  16. JAVA端收集Liunx服务器 CPU 内存 磁盘使用率
  17. linux usb摄像头驱动程序,Linux系统下USB摄像头驱动开发
  18. jpg图片损坏怎么修复?可以试试这个方法
  19. 解决HTML、PHP乱码问题
  20. Apache Kudo: 1.0版和未来 [session]

热门文章

  1. PHP - ReflectorClass 反射类的作用
  2. 西班牙打掉一黑客集团 曾千万台肉鸡
  3. 3.第一本 docker 书 --- docker 网络
  4. 3.调试与配置,控制器
  5. php curl模拟织梦登录,PHP 模拟浏览器 CURL 采集阿里巴巴
  6. [AtCoder Beginner Contest 133]F - Colorful Tree
  7. [2019杭电多校第七场][hdu6655]Just Repeat
  8. 1.1selenium 介绍
  9. 洛谷P2486 [SDOI2011]染色
  10. ESXi主机性能问题