Tag: generics

Eclipse Neon.1generics编译错误:无法推断类型参数

MWE : import java.util.Comparator; import java.util.TreeMap; import static java.util.Arrays.asList; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.mapping; import static java.util.stream.Collectors.toList; public class ShouldCompileInEclipse { void doesNotCompileInEclipse() { asList(“eclipse”).stream() .collect(groupingBy( this::function, () -> new TreeMap(Comparator.reverseOrder()), mapping(this::function, toList()))); } String function(String s) { return s; } } 为什么代码不能在Eclipse下编译? Version: Neon.1a Release (4.6.1) Build id: 20161007-1200 错误是: Cannot infer type […]

问题<T延伸可比较>

我有一个三类:1.class Algorithm ,其中max()在Collection找到最大值: public class Algorithm { public static <T extends Comparable> T max(Collection coll) { T max = coll.iterator().next(); for (T elm : coll) { if (max.compareTo(elm) < 0) max = elm; } return max; } } 2.Class Fruit : public class Fruit implements Comparable { private String name; private int size; public Fruit(String […]

如何获取通用类型参数?

只是: public static class MyClass { // i don’t want to keep an instance of T, if it is not necessary. // and it is not nice, not neat. // Or, let’s say, the member are in the form of : ArrayList mArrayList = new ArrayList(); // the problem of getting the generic type parameter […]

使用具有generics优势的多种值类型映射

我想创建一个地图,它将提供generics的好处,同时支持多种不同类型的值。 我认为以下是通用集合的两个关键优势: 编写时间警告将错误的东西放入集合中 从集合中获取东西时无需进行强制转换 所以我想要的是一张地图: 它支持多个值对象, 检查放入地图的值(最好是在编译时) 知道从地图获取时的对象值。 使用generics的基本案例是: Map map = new HashMap(); // No type checking on put(); map.put(MyKey.A, “A”); map.put(MyKey.B, 10); // Need to cast from get(); Object a = map.get(MyKey.A); String aStr = (String) map.get(MyKey.A); 我找到了一种方法来解决第二个问题,通过创建一个AbstractKey,它由与此键关联的值类通用: public interface AbstractKey { } public enum StringKey implements AbstractKey{ A,B; } public enum IntegerKey […]

用`?转换Java`sort`签名 超级T`到Scala(仿制药)

问题: 查看有关迁移Java签名的问题 public <A extends Comparable> void sort(List list) { } 对Scala来说,似乎没有办法避免 illegal cyclic reference involving type T 如果您像这样进行字面翻译,则会出错。 def compilerFailure[T : T]](a: Array[T]): T = { } 解决方法似乎是这样做 def workaround[A : A](list: List[A]) { } 如果你从字节码回程到Java,你得到这个(它失去了super部分) public <T extends Comparable, U> void scalaToJava(List a) { } 我的问题: scalaToJava版本是否等效于以下内容? public <T extends Comparable> void sort(List […]

Java未选中覆盖返回类型

我有一个包含以下组件的项目: public abstract class BaseThing { public abstract ThingDoer getThingDoer(); } public class SomeThing extends BaseThing { public ThingDoer getThingDoer() { return Things.getSomeThingDoer(); } } public class SomeOtherThing extends BaseThing { public ThingDoer getThingDoer() { return Things.getSomeOtherThingDoer(); } } public class Things { public ThingDoer getSomeThingDoer { return getThingDoer(SomeThing.class); } public ThingDoer getSomeOtherThingDoer { return […]

Java中不同类型的generics类的静态成员是否不同?

@Spence问了这个上一个问题 。 那么,Java中的工作方式如何? 通用类型在运行时在Java中被丢弃,那么使用不同generics类型实例化的类的静态变量会发生什么?

使用Annotations使用Spring Hibernate编写更少的DAO

我的Spring + Hibernate配置文件很小且非常紧凑。 我使用自动扫描来查找我的模型实体/ daos。 我不想在我的层次结构中为每个实体编写DAO + DAOImpl。 有些人可能有资格拥有自己的,如果他们与其他实体有复杂的关系,并且需要的不仅仅是基本的CRUDfunction。 但其余的…… 有没有办法规避事实上的标准? 比如,像通用的DAO,ex: http://www.ibm.com/developerworks/java/library/j-genericdao/index.html 然后我可以做类似的事情 GenericDao dao = appContext.getBean(“genericDao”); dao.save(car); dao.save(lease); 这有可能带注释吗? 我不想在xml中配置任何东西。 如果我不能在上面做,是否仍然可以有一个GenericDaoImpl.java类似于: @Repository(“carDao”) @Repository(“leaseDao”) class GenericDaoImpl extends CustomHibernateDaoSupport implements GenericDao { … } 接着 GenericDao dao = appContext.getBean(“carDao”); dao.save(car); dao = appContext.getBean(“leaseDao”); //carDao is garbage coll. dao.save(lease); 这有用吗?

转换为在运行时确定的类

我有一个方法fetchObjects(String) ,期望返回一个Contract业务对象数组。 className参数告诉我应该返回什么样的业务对象(当然这在这个解释的情况下没有意义,因为我已经说过我将返回Contract s,但它基本上是我在实际场景中的情况)。 所以我从某处获取了一组条目并加载了集合条目的类(其类型由className指定)。 现在我需要构造要返回的数组,所以我使用Set的toArray(T[])方法。 使用reflection,我构建了一个空的Contracts数组。 但是,这给了我静态类型Object的值! 接下来我需要将它转换为适当的类型,在本例中是Contract[] (参见下面列表中的“带星号 – 下划线”部分)。 我的问题是:有没有办法,如何,如同在列表中那样转换为Contract[] , 但只通过className (或entriesType ) 确定数组元素的类型( Contract )? 换句话说,我想做的基本上是这样的: (entriesType[]) valueWithStaticTypeObject ,其中entriesType被classname参数指定的classname替换,即Contract 。 这在某种程度上是不可能的,还是可以以某种方式完成? 也许使用generics? package xx.testcode; import java.util.HashSet; import java.util.Set; class TypedArrayReflection { public static void main(String[] args) { try { Contract[] contracts = fetchObjects(“Contract”); System.out.println(contracts.length); } catch (ClassNotFoundException e) {} } […]

Java:Class 和Class:从类的内部/外部使用时的差异

我有一个类需要使用Class参数(参见我之前的半相关问题 )。 它是: public class BaseTable { protected Class mClass; … public BaseTable(int rows, int cols, Class clasz) { … mClass = clasz; } public BaseTable(int rows, int cols) { this(rows, cols, StringTableEntry.class); //Does NOT compile: //expected [int, int, Class], but got //[int, int, Class] } … } 我想知道为什么构造函数(带有2个参数)不起作用,但是当我从外部类调用完全相同的东西时,如下所示: mSomeTable = new BaseTable(2, 2, StringTableEntry.class); […]