Tag: generics

Java Collections.sort – 帮我删除未经检查的警告

List questions = new ArrayList(); questions.addAll(getAllQuestions()); //returns a set of Questions Collections.sort(questions, new BeanComparator(“questionId”)); //org.apache.commons.beanutils.BeanComparator 在Java 1.5下,上述工作正常,只是’new BeanComparator(“questionId”)’生成一个未经检查的警告。 我不喜欢警告。 有没有办法可以为BeanComparator提供类型,还是必须使用@SuppressWarnings(“unchecked”) ?

Java Generics Type Erasure字节代码

根据关于Erasure of Generic Types的java文档, 考虑以下表示单链表中节点的generics类: public class Node { private T data; private Node next; public Node(T data, Node next) } this.data = data; this.next = next; } public T getData() { return data; } // … } 因为类型参数T是无界的,所以Java编译器用Object替换它: public class Node { private Object data; private Node next; public Node(Object data, Node next) { […]

如何在Java中使用generics类型获取类

我想尝试这样的方法调用, public class GenericsTest { public static Map createMap(Class<? extends Map> clazz) { return null; } public static void main(String[] argv) { Map result = createMap(TreeMap.class); } } 但我收到这个错误, createMap(java.lang.Class<? extends java.util.Map>) in test.GenericsTest cannot be applied to (java.lang.Class) 如何解决这个问题?

为什么Function.identity()会破坏类型设置,但t – > t不会?

在Java 8 lambdas,Function.identity()或t-> t中找到的答案似乎暗示Function.identity()几乎总是等于t -> t 。 但是,在下面看到的测试用例中,用Function.identity()替换t -> t导致编译器错误。 这是为什么? public class Testcase { public static Collector comparatorOrdering( Function keyMapper, Function valueMapper, Comparator keyComparator, Comparator valueComparator) { return null; } public static void main(String[] args) { Map case1 = Stream.of(1, 2, 3). collect(comparatorOrdering(t -> t, t -> String.valueOf(t), Comparator.naturalOrder(), Comparator.naturalOrder())); Map case2 = Stream.of(1, […]

Javagenerics – 太复杂了? 如何简化?

最初我在CodeReview上发布了这个问题,但这更适合StackOverflow。 我正在编写一个使用Java 6的多步骤过程。假设有3个步骤。 每个都接受相同类型的输入。 让我们开始。 这是作为输入传递给每个步骤的对象。 此对象充当另一类对象的包装器,以及一些步骤的共享值。 请注意,名称会被翻译为更通用的域名,而使用英语,原件是意大利语。 public class EntityStepInput { public final T entity; public boolean modified; public boolean canceled; public EntityStepInput(final T entity) { this.entity = entity; } } 这是每个步骤使用的接口。 public interface EntityStep<T extends EntityStepInput> { void process(final T stepInput) throws Exception; } 现在,3个步骤中的2个必须接受包含Entity或从中派生的任何类型的EntityStepInput 。 public class FirstEntityStep implements EntityStep<EntityStepInput> { @Override […]

generics与&-operator和命令的含糊不清

我有一个奇怪的Javagenerics模糊行为,我无法解释: 课堂上的3种方法: public static void method(E val) {} public static void method(E val) {} public static void method(E val) {} 编译好。 但那些没有(歧义违规): public static void method(E val) {} public static void method(E val) {} public static void method(E val) {} (ClassA,ClassB,ClassC都是完全独立的接口!)

一般用Java覆盖一个方法

如果我有这样的基类,我无法改变: public abstract class A { public abstract Object get(int i); } 我尝试用这样的B类扩展它: public class B extends A{ @Override public String get(int i){ //impl return “SomeString”; } } 一切都好。 但是如果我尝试的话,我试图让它更通用的失败: public class C extends A{ @Override public T get(int i){ //impl return (T)someObj; } } 我想不出有什么理由不应该被禁止。 根据我的理解,generics类型T绑定到一个Object – 它是A的请求返回类型。 如果我可以将String或AnyObject作为我的返回类型放在B ,为什么我不允许在我的C类中放入 T ? 从我的观点来看,另一种奇怪的行为是这样的另一种方法: public […]

Spring:如何使用generics在Spring配置中注入ENUM?

我有一个这样的课: public class CheckSetFilter<E extends Enum> { public CheckSetFilter(CheckSetManager pCheckSetManager, E pCheckSetId) } 我有这个枚举: public enum StubCheckId { STUBCHECK1, STUBCHECK2 } 我尝试用Spring创建这样一个对象: 它抱怨,它无法从String转换为Enum。 我想这是因为通用。 它无法知道要创建的枚举类型。 我也尝试给它一个类型提示,但没有运气。

Javagenerics中不会抛出ClassCastException

下面是我写过的第一个Javagenerics: public class MyClass { public static T castToAnotherType(Object param) { T ret = null; try { ret = (T) param; } catch (ClassCastException e) { System.out.print(“Exception inside castToAnotherType()”); } return ret; } public static void main(String[] args) { try { String obj = MyClass.castToAnotherType(new Object()); } catch (ClassCastException e) { System.out.print(“Exception outside castToAnotherType()”); } […]

在Clojure中实现Java通用接口

我正在尝试使用webdriver的webdriver-clj包装器在selenium2 / webdriver项目中获取clojure。 但是,由于Web界面是大量编写脚本的,我需要有一个选项来等待脚本创建某些元素,而不是页面加载。 所以我试图在clojure中创建一个wait-for函数,使用WebDriverWait类来测试元素属性,最好使用webdriver / by-functions中的clojure语法。 然而,服务员类直到方法采用通用接口(com.google.common.base.Function)作为参数,并且由于我的Java知识几乎不存在,这对于我刚刚起步的clojure技能来说certificate太多了。 任何有clojure-java互操作技能的人,以及如何在clojure中实现以下java代码以便它与webdriver / by-syntax结合的想法? Function presenceOfElementLocated(final By locator) { return new Function() { public WebElement apply(WebDriver driver) { return driver.findElement(locator); } };} // … driver.get(“http://www.google.com”); WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/3); WebElement element = wait.until(presenceOfElementLocated(By.name(“q”)) 结果应该使这样的事情成为可能 (defn test [] (let [driver (webdriver/new-driver :firefox)] (webdriver/get driver “http://127.0.0.1/”) (webdriver/wait-for (webdriver/by-name […]