java中 t无法对齐,java – 即使X应匹配T,也无法将X转换为T?
我通常是一名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?相关推荐
- Java 中的 XML:Java 文档模型的用法
Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...
- 在java中使用JMH(Java Microbenchmark Harness)做性能测试
文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 ...
- java 泛型详解、Java中的泛型方法、 java泛型详解
本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...
- java中函数的调用,java中如何调用函数
java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...
- Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决
Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决 参考文章: (1)Java中使用json时java.lan ...
- java按两列输出_有没有一种简单的方法可以将两列输出到Java中的控制台? - java...
如标题所述,是否有一种简单的方法可以将两列输出到Java中的控制台? 我知道\t,但是在使用printf时,我还没有找到基于特定列进行空间分配的方法. 参考方案 使用宽度和精度说明符,将其设置为相同的 ...
- java中hashcode_浅谈Java中的Hash值
1.Hash值有什么用? HashMap.HashTable.HashSet,所以涉及到使用Hash值进行优化存储的地方,都会用到HashCode.HashCode是Key,这种计算为提高计算的性能. ...
- java中的action_浅析java中action的作用
正如早先指出的那样,action()并不是我们对所有事进行分类后自动为handleEvent()调用的唯一方法.有三个其它的被调用的方法集,如果我们想捕捉某些类型的事件(键盘.鼠标和焦点事件),因此我 ...
- 在java中表示json_在Java中解析JSON而不知道JSON格式
我试图解析在Java中的JSON字符串,并找到键值对,使我可以确定JSON对象的近似结构,因为JSON字符串的对象结构是未知的. 例如,一个执行可能有一个JSON字符串,如下所示: {"id ...
- JAVA中throw用法例子,Java Optional orElseThrow()用法及代码示例
Java中的java.util.Optional类的orElseThrow()方法用于获取此Optional实例(如果存在)的值.如果此Optional实例中不存在任何值,则此方法将引发从指定供应商生 ...
最新文章
- Windows平台九点提升权限终极技巧
- 82.开始→运行→输入的命令集锦
- java8 streams_Java 8 Streams:过滤和谓词否定
- android监控指纹信息变化,android监听指纹变化(解决反射思路在android10不生效的问题)...
- python闭包怎么理解_Python 闭包的理解
- 计算机操作系统 内存_计算机内存的类型| 操作系统
- winform 统计大量数据重复的元素个数_DAY10——推断统计之概率与概率分布:常见的离散型概率分布...
- 实践证明,SQL Server 2000 + 2005 + 2008,完全可以共存
- [Luogu 3835]【模板】可持久化平衡树
- 安装操作系统的过程图解
- 使用委托(事件)或中介设计模式实现多个Windows窗体文本框的同步
- 关于Django的搭建
- OCR之Tesseract使用
- js复制隐藏域中的文字
- 设置360极速浏览器的模式默认为极速模式
- JAVA端收集Liunx服务器 CPU 内存 磁盘使用率
- linux usb摄像头驱动程序,Linux系统下USB摄像头驱动开发
- jpg图片损坏怎么修复?可以试试这个方法
- 解决HTML、PHP乱码问题
- Apache Kudo: 1.0版和未来 [session]
热门文章
- PHP - ReflectorClass 反射类的作用
- 西班牙打掉一黑客集团 曾千万台肉鸡
- 3.第一本 docker 书 --- docker 网络
- 3.调试与配置,控制器
- php curl模拟织梦登录,PHP 模拟浏览器 CURL 采集阿里巴巴
- [AtCoder Beginner Contest 133]F - Colorful Tree
- [2019杭电多校第七场][hdu6655]Just Repeat
- 1.1selenium 介绍
- 洛谷P2486 [SDOI2011]染色
- ESXi主机性能问题