Tag: generics

在Java 1.5中将非genericsList类型转换为Generic List类型

我有一个List,保证只包含一个类型对象。 这是由我无法更新的库中的某些底层代码创建的。 我想基于传入的List对象创建一个List ,以便我的调用代码与List 进行通信。 将List(或任何其他对象集合)转换为List 的最佳方法是什么。

Java中是否存在使用generics(域模型,而不是持久层)的多对多集合?

我似乎在Google中使用了错误的搜索字词… 我为多对多关联编写了一个通用类,但我猜这已经完成了。 它很可能存在于比我自己更好的实现中。 这是我第一次尝试编写generics类。 为了更好地了解我正在寻找的东西,我收录了一些我自己的片段: 我用2个哈希映射支持它: private final Map<T, List> ssForTs = new HashMap<T, List>(); private final Map<S, List> tsForSs = new HashMap<S, List>(); 这是实例化: new ManyToManyAssociations(); 一些可用的方法: public void addAssociation(T t,S s) public void removeAssociation(T t,S s) public List getListOfTs() public List getListOfSs() 公共列表 getTsForSs(S s) 公共列表 getSsForTs(T t) 这些方法的名字很差……我道歉。 基本用法是:我可以很容易地找到所有S for T和反向。 您是否可以将链接发布到已包含此function的抛光库中?

如何不抛出一般指定的exception?

我创建了一个“生成器”接口(与方法引用一起使用,分别用于unit testing的模拟): @FunctionalInterface public interface Factory { public R newInstanceFor(T t) throws X; } 我创建的那样,因为我的第一个用例实际上必须抛出一些已检查的WhateverException 。 但我的第二个用例没有投掷X. 我能想出的让编译器满意的最好方法是: Factory factory; 这编译,并做我需要的,但仍然是丑陋的。 有没有办法保留单个接口,但在声明特定实例时不提供X?

如何使用generics从Java中的List 转换为List ?

在Java中,如何使用通用方法将List转换为List以便我可以使用单个方法调用替换以下模式: List untypedList = new ArrayList(); // or returned from a legacy method List typedList = new ArrayList(); for (Object item: untypedList) typedList.add((Integer)item); 请注意,上面的代码不会生成任何类型安全警告,理想情况下,您的解决方案也不应生成任何此类警告。 如果列表Class具有公共默认构造函数,以下解决方案是否可行? public class ListUtil { public static <T, L extends List> L typedList(List untypedList, Class itemClass, Class listClass) { L list = null; try { list = listClass.newInstance(); } catch (InstantiationException […]

创建generics集合数组

实际上,问题应该是 Creating an array of generic anything. 为什么编译器不能处理它呢? 以下内容将被标记为错误 – 无法创建通用数组。 List[] dtoLists = {new ArrayList(), anExistingDtoList}; 要克服这一点,我需要 List[] dtoLists = (List[])Array.newInstance(ArrayList.class, 2); dtoLists[0] = new ArrayList(); dtoLists[1] = anExistingDtoList; 那么,为什么编译器不能将第一种情况转换为第二种情况呢? 我确实认识到generics是编译时确定的而不是运行时确定的,而数组是运行时确定的,因此需要确定类型才能创建数组。 编译器设计人员会遇到哪些技术/逻辑障碍会妨碍他们实现这一目标? 关于语言正交性,问题纯粹是哲学吗? 如果是这样,这种行为将如何违反语言正交性? 这是复杂性的问题吗? 解释复杂性。 我希望我的问题的答案能让我更好地了解java编译器在涉及generics时的行为。 旁注:来吧,停止触发快乐。 答案通用列表数组不回答我的问题。 为什么编译器无法自发执行转换?

在java 8下使用generics键入错误,但不是java 7

我有一段代码在java 7下编译得很好,但不是在java 8下编译。这是一个独立的再现示例(我已经采用了真实的代码来展示这个问题并且删除了所有的实现): import java.util.Iterator; class ASTNode implements Iterable { @Override public Iterator iterator() { return null; } } class List extends ASTNode {} interface Function {} class Iterables { public static Iterable transform( Iterable fromIterable, Function function) { return null; } } class AstFunctions { public static <T extends ASTNode> Function prettyPrint() { return […]

使用JPA2 Criteria API选择MAX时间戳

所以我的实体有: @Column(name=”TS”, nullable=false) private java.sql.Timestamp timestamp; 我生成的MetaModel具有: public static volatile SingularAttribute timestamp; 我想通过Max Timestamp值选择: Root root = query.from(MyEntity.class); Expression maxExpression = cb.max(root.get(MyEntity_.timestamp)); 但我不被允许,因为: max(Expression x)使用数值max运算创建聚合表达式。 Expression 当然Timestamp不会扩展Number 。 如何使用typesafe Criteria API在Timestamp列上执行MAX ? 谢谢。

通用类型作为Java方法中的参数

你认为有可能创造类似的东西吗? private ArrayList increaseSizeArray(ArrayList array_test, GenericClass) { array_test.add(new GenericObject()); // instance of GenericClass return array_test; }

数组如何在Java中“记住”它们的类型?

请考虑以下代码: class AA { } class BB extends AA { } public class Testing { public static void main(String[] args) { BB[] arr = new BB[10]; AA[] arr2 = arr; BB b = new BB(); AA a = new AA(); arr2[0] = a; // ArrayStoreException at runtime arr2[1] = b; List listBB = new ArrayList(); […]

Java互操作性与Scalagenerics和装箱相关

假设我有这个Scala特征: trait UnitThingy { def x(): Unit } 提供Java实现很容易: import scala.runtime.BoxedUnit; public class JUnitThingy implements UnitThingy { public void x() { return; } } 现在让我们从一般特征开始: trait Foo[A] { def x(): A } trait Bar extends Foo[Unit] 上面的方法不起作用,因为单位x返回现在已装箱,但解决方法很简单: import scala.runtime.BoxedUnit; public class JBar implements Bar { public BoxedUnit x() { return BoxedUnit.UNIT; } } 现在假设我在Scala端有一个x定义的实现: trait […]