我有以下情况: 那怎么做? 编辑:请考虑T可以是从Byte到BigDecimal的任何值,强制其为整数可能意味着丢失数据
为什么Java中的泛型可以处理类而不能处理基元类型? 例如,这个操作很好: 但这是不允许的:
可以使用泛型将返回类型与参数类型匹配吗? 实例案例: 我有一个抽象类,可以从不同的POJO导入数据,这个类包含一个abstract方法importData。 importData返回的对象必须与传递给该方法的对象类型相同。 由于抽象方法的每个实现的对象类型不同,并且类型不扩展另一个,如何定义抽象方法,以便实现返回类型和传递类型必须匹配? 经过考验: 结果: 方法的返回类型不必与传递的对象类型匹配。
我们解决什么问题 我们知道,JDK中的Cloneable接口只是一个空接口,并没有定义成员,它存在的意义仅仅是指明一个类的实例化对象支持位复制(就是对象克隆),如果不实现这个类,调用对象的clone()方法就会抛出CloneNotSupportedException异常。而且,因为clone()方法在Object对象中,返回值也是Object对象,因此克隆后我们需要自己强转下类型。 泛型克隆接口
演示代码:https://tsplay.dev/N5jo0m 从cut以上,可以看到都是正确的,问题在函数sellect 我需要根据第一个参数name: T去判断第二个参数data的类型 提供的name是fixed就限制data是FixedInstance,否则就限制为FollowInstance 问题1:我在sellect参数传参的时候故意 as FollowInstance,在TS中并没有报错
问题内容: 还有其他一些SO问题在讨论可以使用Eclipse的编译器而不是javac进行泛型编译的问题(即Java:泛型在Eclipse和javac中处理不同,而泛型可以在Eclipse中编译和运行,但不能在javac中编译)-但这看起来就像一个稍微不同的人。 我有一堂课: 我还有一个带有方法的类,该方法接受来自以下类型的任意对象: 这在Eclipse中可以正常工作,但是当我使用进行了干净的构建时
问题内容: 我试图理解有界类型,而不是完全掌握它们的要点。 有一个提供此用例的有限泛型示例: 如果要限制可以作为参数化类型的类,为什么不将所有参数化全部忘掉而拥有: 然后,任何扩展/实现的类都可以与此类一起使用。 还有一个附带的问题:当Java 类是final 时,如何扩展第一个示例? 问题答案: 当Java Integer类为final时,T在第一个示例中如何扩展Integer? 只能是,因此这
问题内容: 我对此有不同的疑问,但是我仍然觉得这个话题很混乱。 我要做的就是拥有一个实现接口的抽象类,并具有一个扩展此抽象类的类,以便硬类需要实现and ,而无需其他方法,因为该方法位于抽象类中。 我有以下界面。 还有这个抽象类 我想这样使用 但是,我得到 为什么没有正确覆盖它? 更新 感谢@Bozho,解决方案是这样的: 问题答案: 我建议使接口通用,而不仅仅是其方法: 然后
问题内容: 在关于反射的本教程中,它指出: […]因为泛型是通过类型擦除实现的,因此在编译过程中会删除有关泛型类型的所有信息 我的知识是使用泛型,以便在编译时编译器可以检查类型安全性。即失败快速方法。但是该链接提到类型擦除会在编译期间删除通用信息。 问题答案: 您引用的语句是正确的:编译器在编译过程中在内部使用通用类型信息,在处理源时会生成与类型相关的错误。然后,一旦完成验证,编译器将生成类型擦除
问题内容: 鉴于: 我得到: 我还会收到关于第6行的“未经检查的演员表”警告。为什么?该是 不是 一个泛型类型- 它只是一个普通的。如何通过检查和强制转换为实例来正确实现? 注意:显然,此代码示例是我的实际代码的简化版本。真正的类和都大得多,是一个内部类的其实现中使用。 仅供参考:实数确实使用了通用参数。 问题答案: o不是通用类型-只是普通对象。 那不是问题。问题…和两个编译错误的根本原因…是泛
问题内容: 我想在嵌套的静态接口中使用泛型类。我的目标是做这样的事情: 但是我得到一个错误:无法对非静态类型T进行静态引用。如果进行一些更改(如下所述),我可以在接口内部使用泛型,但是我想避免使用此方法,因为编写同一个类两次:一次用于MyClass,一次用于MyInterface。 谢谢。 编辑 :我想这样做: 要么 问题答案: 静态嵌套类或嵌套接口(顺便说一句,始终是静态的)与其外部类(或接口)
问题内容: 因此,首先,我的代码基于该线程中可接受的答案。 我正在尝试从数据库创建一个表视图,并且该表视图应根据用户要求的数据动态填充。到目前为止,尽管工作正常,但我的问题是,从数据库收集的所有值都在Java中解释为字符串,但是我需要它们的实际值。 这样做的原因是javafx tableview的内置排序机制将所有数字排序为字符串,因为填充表时它们的类型会转换为字符串。 示例:值921、200、1
问题内容: 假设我有一个抽象类 我有一些特定的培训师,例如: 这些“训练者”中的每一个都有一套固定的技巧,他们可以训练动物去做,我想用枚举来做。所以我有一个接口: 在每个培训师中,我都有一个实现此接口的枚举。所以: 现在,在每个Trainer类中,我想要一个方法“ trainingComplete”,该方法以枚举之一作为输入并将其保存到集合中。所以 但是,我不想在每个特定的培训师中定义“完成”集,
问题内容: 我有一个接受 通用类型的类 ,并且我想以一种不尴尬的方式重写该方法(即,看起来很干净,并且代码量最少,但用于非常普通的用例)。 现在我有这样的事情: 我猜这是非常有缺陷的-我正在对对象进行强制转换,这可能会 引发错误 。 另一件事是-当我这样做时,我实际上并不是在检查正确的事情。我实际上想检查类型而不是类型。每当我尝试进入时,都会出现类似以下的错误: 无法对参数化类型执行instanc
问题内容: 这是我的基本功能: 此功能能够连接并在我的数据库上执行查询… 我想创建相同的功能,但更通用。…前一个仅用于一个表(),新表必须能够接受查询的参数作为输入,以及将在其中执行查询的类类型。这将允许我仅使用一行来执行查询。 应该是这样的: 您发现我不知道如何“通用”代码… 我希望已经清楚了… PS 应该是DB()中表的类的代表。 谢谢。 问题答案: 如果您打算返回结果集,请使用: