Tag: generics

static <T extends Number&Comparable >

我有一个静态方法跟随类: public class Helper { public static <T extends Number & Comparable> Boolean inRange(T value, T minRange, T maxRange) { // equivalent (value >= minRange && value = 0 && value.compareTo(maxRange) <= 0) return true; else return false; } } 我试着调用这个方法: Integer value = 2; Integer min = 3; Integer max = 8; Helper.inRange(value, min, […]

来自模板化对象的Java 8函数构造函数

我正在使用Eclipse Luna Service Release 2(4.4.2),Java 8 u51。 我正在尝试创建一个方法,该方法将基于另一个方法参数创建传递对象的实例。 原型简化为 public T test(Object param, T instance) { Constructor constructor = instance.getClass().getConstructors()[0]; // I actually choose a proper constructor // eclipse reports “Unhandled exception type InvocationTargetException” Function createFun = constructor::newInstance; T result = (T) createFun.apply(param); return result; } 与Function声明一致的eclipse报告Unhandled exception type InvocationTargetException编译器错误。 我需要Function以后在流中使用。 我试图添加各种try / catch块,抛出声明,但没有修复此编译器错误。 如何使这段代码工作?

条目集上的通用迭代器

static void myMethod(Map map) { Iterator<Entry> it = map.entrySet().iterator(); } 我在下面看到编译错误: 类型不匹配:无法从Iterator<Map.Entry>为Iterator<Map.Entry>

强制generics方法的两个参数具有相同的具体类型

如何使用具有两个参数的方法,两个参数具有相同的具体类型? 例如, boolean equals(Object a, Object b) 允许任何类型的任何类型和b 。 我想强迫a和b具有相同的具体类型。 我试过了 boolean equals(T a, T b) 期望编译时错误,但是我没有错误,因为T会解析为? extends Serializable & Comparable ? extends Serializable & Comparable ,因为Date和String实现了Serializable和Comparable 。

奇怪的Java通用

这是什么意思? HashBiMap charOcc = HashBiMap. create();

在接口扩展中指定generics

在使用另一个接口扩展接口时,是否应该指定generics类型的具体类型? 我的意思是,如果我有一个界面: public interface Repo{ Collection search(String params); T get(String id); } 然后是一堆特定的存储库,如ClientRepo , CustomerRepo等……扩展此接口时指定类型T是合理的,例如: public interface ClientRepo extends Repo{ } public interface CustomerRepo extends Repo{ } 客户和客户只是某些类。 有没有人有类似的问题? 我的意思是我能做到: public interface ClientRepo extends Repo{ } 附录 :也许我应该让我更清楚地了解具体的Repos(例如ClientRepo)。 还有另一个名为RepoFactory的接口, 它将适当的Repo返回给客户端,例如: public interface RepoFactory{ ClientRepo createClientRepo(); CustomerRepo createCustomerRepo(); } 该工厂由实现者实现 ,实现者反过来提供具体Repos的适当实现。 事实上,从上面你可以说api的客户端没有使用接口Repo 。 让我感到困惑,希望! 对不起:(

generics编程是多态的一个例子吗?

我正在做一个家庭作业(一个项目),其中一个标准是我必须以明显改善代码整体质量或function的方式利用多态性。 我做了一个哈希表,看起来像这样: public class HashTable{ … } Hashable是我制作的具有hash()函数的接口。 我知道使用generics这种方式可以提高代码的质量,因为现在HashTable几乎可以处理我想要的任何类型(例如,而不仅仅是整数或字符串)。 但我不确定它是否表现出多态性。 我认为确实如此,因为E可以是任何实现Hashable的类型。 换句话说,HashTable是一个可以(几乎)使用任何类型的类。 但我不太确定 – 这是多态吗? 也许我可以得到一些关于究竟多态性是什么的澄清? 提前致谢! 编辑:收到下面的答案后(见: 收到的第一个答案 ),我读了维基百科的文章,并发现了这个: “在面向对象的编程社区中,使用参数多态的编程通常称为generics编程 。” (重点补充)

使用generics投射到内部类

请考虑以下代码: public class Outer { public class Inner{ } public static Outer.Inner get(){ Object o = new Object(); return (Outer.Inner)o; } public static void main(String[] args) throws Exception { Outer.get(); } } 此代码在Eclipse中成功编译,但无法在javac中javac : Outer.java:10: ‘)’ expected return (Outer.Inner)o; ^ Outer.java:10: ‘;’ expected return (Outer.Inner)o; ^ Outer.java:10: illegal start of expression return (Outer.Inner)o; ^ 3 […]

Javagenerics编译器错误

当用Java做一些不太奇特的东西时,我遇到了一个带有generics的错误,我无法理解为什么它不起作用。 代码是: package test; import java.util.*; public class TestClass { public static class A extends C{} public static class B extends C{} public static class C{} public static class D{} public static class E{} public static void main(String args[]){ E<D> a = new E<D>(); E<D> b = new E<D>(); E<D> c = new E<D>(); E<D> […]

Java:为什么不在这里发生自动装箱?

这给了我一个错误: int[] l = new int[] {0, 2, 192, -1, 3, 9, 2, 2}; int[] l2 = new int[] {9001, 7, 21, 4, -3, 11, 10, 10}; int[] l3 = new int[] {5, 5, 5, 64, 21, 12, 13, 200}; Set<List> lists = new HashSet<List>(); lists.add(Arrays.asList(l)); Eclipse:类型Set<List>的方法add(List)不适用于参数( List ) 我以为int应该被自动提交给Integer ?