1 package com.example.base;2 3 import java.util.ArrayList;4 import java.util.List;5 6 import com.example.spring.MyLog;7 /**8 * Producer extends Consumer super 生产者使用extends,consumer使用super9 * 这里的生产者和消费者是相对容器而言的, 10 * 生产者只能对外提供数据,不可以写入数据,数据来源于赋值操作(将参数化类型为子类的容器赋值过来) 11 * 消费者表示只能向容器中写入数据,不能读取(只能以...
如何用Java编写泛型方法. 在C#中,我会这样做public static T Resolve<T>(){return (T) new object();}什么是Java中的等价物?解决方法:首先,你的C#示例是错误的;除非typeof(T)== typeof(object),否则它将抛出InvalidCastException.您可以通过添加constraint来修复它:public static T Resolve<T>() where T : new() {return new T(); }现在,这将是Java中的等效语法(或者,至少,尽可能接近):public static <T> T Resolve() {return ...
是否可以将泛型用于数组?解决方法:数组已经是基本对象类型,也就是说它们不是描述其他对象(如ArrayList或HashMap)集合的类. 您也不能拥有一系列通用类型.以下内容在Java中是非法的:List<String>[] lists = new List<String>[ 10 ];这是因为编译器必须正确地键入数组,并且由于Java的泛型受到类型擦除的影响,因此无法以这种方式满足编译器.
原文链接:http://www.cnblogs.com/cnforest/archive/2012/04/26/2471376.htmljava里同样也有范型的概念,我们可以自定义范型类、范型接口、范型内部类和范型方法等: class MyGeneric<T> { public T value; } class MyOtherGeneric<A, B> { void f(A a, B b) {} } interface MyGenericInterface<T> { T getT(); } class NormalOuter { class GenericInner<T> {} public <T> void GenericMethod(T value) {} } 注意范型不...
我有这门课:public class A<T> {protected T something = new T();... }当然新的T()是不可能的.我该怎么做? 我不能更改调用此类的构造函数的代码,因为这是通过反射完成的. 另一个问题是如何获取泛型类的Class对象. mymethod(A.class)工作,但现在A得到了参数T.解决方法:您可以接收T作为构造函数的参数:protected T something;public A(T something) {this.something = something; }或者,如果A的目标是真正创建新的T实例,那么将T的...
在Java中,我如何使用泛型来创建一个max函数,该函数将两个相同类型的Comparable对象作为参数并返回较大的对象? 我试过了:public static <T extends Comparable> T max(T obj1, T obj2) {return ( ((obj1).compareTo(obj2) >= 0) ? obj1 : obj2); }(如果它们都相等,则返回obj1.) 该方法基于我在http://www.informit.com/articles/article.aspx?p=170176&seqNum=3找到的代码. 但是,当我编译它时,我收到此警告(使用-Xlint:unchecked...
我正在研究泛型,发现以下代码在比较方法时给出了编译时错误.Multiple markers at this line– Cannot infer type argument(s) for comparing(Function)– The type A does not define m1(Object) that is applicable hereclass A<T> {String m1() {return null;} }class B {void test() {Comparator<A<String>> target = Comparator.comparing(A::m1).thenComparing(A::m1);} }有人可以帮助我理解这种行为;我该如何解决这个问题呢...
这是Pair.javaimport java.lang.*; import java.util.*; public class Pair<TYPEA, TYPEB> implements Comparable< Pair<TYPEA, TYPEB> > {protected final TYPEA Key_;protected final TYPEB Value_;public Pair(TYPEA key, TYPEB value) {Key_ = key;Value_ = value;}public TYPEA getKey() {return Key_;}public TYPEB getValue() {return Value_;}public String toString() {System.out.println("in toString()");StringBuf...
我有一个类,其实例将被序列化.因此,该类实现了Serializable.该类有一个List类型的字段,当然也必须是Serializable.想象一下这个类看起来像这样:import java.io.Serializable; import java.util.List;public class Report implements Serializable {private static final long serialVersionUID = 12345L;private List<Record> records = new ArrayList<>(); }现在我知道ArrayList是Serializable,但我宁愿声明我的字段是某种接口类型...
升级到Java 1.8后,我遇到了一个泛型方法的问题,这对于Java 1.6和1.7来说很好请考虑以下代码: public class ExtraSortList<E> extends ArrayList<E> {ExtraSortList(E... elements) {super(Arrays.asList(elements));}public List<E> sortedCopy(Comparator<? super E> c) {List<E> sorted = new ArrayList<E>(this);Collections.sort(sorted, c);return sorted;}public static void main(String[] args) {ExtraSortList<String> s...
我目前正在为遗留数据库定义JPA实体(许多复合键,但也包括单列键).我创建了以下实体超类:@MappedSuperclass public abstract class AbstractEntity<ID extends Serializable> {public abstract ID getId();public abstract void setId(ID id); }然后是复合键的超类(以及长主键的超类,此处未列出):@MappedSuperclass public abstract class AbstractEmbeddedIdEntity<ID extends Serializable> extends AbstractEntity<ID> {@Embed...
是否有可能提取内部泛型类型? 想象一下以下课程:interface Animal { }class Bear implements Animal { }class AnimalRule<ANIMAL extends Animal> { }class BearRule extends AnimalRule<Bear> { }现在我想为这段代码编写测试,但我希望有一个通用的基础测试类. 我可以这样声明:class AnimalRuleAltTest<ANIMAL extends Animal, RULE extends AnimalRule<ANIMAL>> {RULE rule;ANIMAL animal; }class BearRuleAltTest extends Ani...
以下Java代码不会生成未经检查的强制转换警告(使用Eclipse编译器对Java 8进行测试):class Parent<T> {}class Child<T> extends Parent<T> {}class Test {<T> void test() {Parent<T> p = new Child<T>();// cast accepted by compiler:Child<T> cast = (Child<T>)p;} }所以我理解,如果p既是父< T>,那么编译器必须以某种方式得到它. (通过编译时类型)和Child(通过运行时转换),然后可以安全地假设它是Child< T>因为Child在其extends...
我试图扩展ActivityInstrumentationTestCase2如下:public abstract class FooActivityTestCase<T extends Activity>extends ActivityInstrumentationTestCase2<Activity> {public FooActivityTestCase(String pckg, Class<Activity> activityClass){super(pckg, activityClass);}public void foo(){ ... } }我尝试像这样扩展FooActivityTestCase:public class SpecificFooTestCaseextends FooActivityTestCase<MyActivity> {publ...
我正在使用Play框架.我想使用函数renderJSON和2个对象作为参数.它似乎不可能,所以我试图创建一个包含2个对象的类.为了不必每次都创建一个新类,我想使用泛型,但它似乎不起作用: 型号:public class JSONContainer<T> extends Model {private T myT;private StatusMessage mySm;public JSONContainer(T myT, StatusMessage mySm) {this.myT = myT;this.mySm = mySm;} }然后 : 在Controller的功能中:JSONContainer<User> myJ = new...