【再谈Java泛型---下】教程文章相关的互联网学习教程文章

Java泛型类型参数【代码】

这个问题已经在这里有了答案: > Get generic type of java.util.List 14个我有一个采用List<?>的方法.作为争论.public static String method(List<?> arg){// Do something based on type of the list }//I call the method as below List<ClassA> listA = new ArrayList<ClassA>(); List<ClassB> listB = new ArrayList<ClassB>(); method(listA); method(listB);在方...

Java方法分派如何与泛型和抽象类一起使用?【代码】

我今天遇到了一种情况,其中Java没有调用我期望的方法-这是最小的测试用例:(很抱歉,这似乎是人为设计的-“现实世界”场景要复杂得多,并且更有意义从“为什么要这么做呢?”的角度来看.) 我对为什么会发生这种情况特别感兴趣,我不在乎重新设计的建议.我觉得这是Java Puzzlers中的功能,但是我没有副本. 请参见下面的Test< T> .getValue()中的特定问题:public class Ol2 { public static void main(String[] args) { Test<Integer>...

java-如何在泛型中为通配符ArrayList添加一个整数元素?【代码】

我有一个ArrayList通用通配符类型,它以Number为扩展名.我正在尝试将整数值添加到ArrayList中. 但是它给我一个错误,说ArrayList<? extends Number> numberList = new ArrayList<Number>();numberList = new ArrayList<Integer>();numberList.add(100);The method add(int, capture#2-of ?) in the type ArrayList<capture#2-of ?> is not applicable for the arguments (int).我也尝试过这种方法,但是给了我同样的错误ArrayList<?> ...

将lambda作为参数传递给泛型类型-Java 8【代码】

如果我有一个方法foo(Predicate bar),则可以在下一步使用它:foo(new Predicate<MyObject>() {public boolean apply(MyObject obj) { return true;}} )但是如何使用lambda样式的表达式达到相同的结果:foo((MyObject obj) -> true); //obvious compile exception如何将带有lambda的泛型类型传递给方法?或者,简单地讲,如何使用不带局部变量的lambda样式创建Predicate(或其他)类的匿名对象.解决方法:不要使用原始类型foo(Predicate&...

Java泛型【代码】

泛型基础泛型类我们首先定义一个简单的Box类: 1234567891011public class { private String object; public void set(String object) { this.object = object; } public String get() { return object; }} 这是最常见的做法,这样做的一个坏处是Box里面现在只能装入String类型的元素,今后如果我们需要装入Integer等其他类型的元素,还必须要另外重写一个Box,代码得不到复用,使用泛型可以很好的解...

Java泛型和泛型类型【代码】

我有一个ExtA类,其中包含一个用于过滤ArrayList的过滤器函数:public ExtA<T> filt(...) {//code}编译时出现错误:找不到符号类T.这是为什么?解决方法:您必须告诉它,在这种情况下T是泛型类型:public <T> ExtA<T> filt(Func<T, Boolean> a)您用符号T声明了接口,但是该符号仅在接口声明本身中有效.您在方法中使用的T是不同的T.您必须再次声明它,因为该方法未在接口声明中实现.

为什么在泛型类(Java)的构造函数中提供类型参数是错误的?【代码】

我只是从教科书中学习Java中的泛型,它讲的是GenericStack< E>类.用ArrayList< E>实现. 因为为了创建一个字符串堆栈,您可以使用GenericStack<String> = new GenericStack<String>()要么GenericStack<String> new GenericStack<>()因此不应该是构造函数GenericStack被定义为public GenericStack< E>(),还是public GenericStack<>()?答案是不.它应该被定义为public GenericStack(). 为什么是这样?显然,构造函数可以很容易地从类声明...

Java泛型方法声明基础【代码】

我开始学习Genericsfor Java并且我阅读了几个教程,但我有点困惑,不知道如何声明泛型方法. 当我使用泛型类型时,定义方法的正确顺序是什么?我找到了这个样本,什么时候需要使用尖括号,何时不需要?public class Box<A> {private A a;...public void setA(A a) {this.a = a;}public <A> List<A> transform(List<A> in) {return null;}public static <A> A getFirstElement(List<A> list) {return null;}public A getA() {return a;}解...

如何限制Java泛型类型中允许的类型数量【代码】

说,我有一个通用类型如下public class GenericType<T> {private T someVar;public void setVar(T var) { this.someVar = var; }//Rest of the code }我想允许它只采用特定类型(String / Integer / Double).我知道有限的通配符,但他们在这里没有帮助我.在setVar()中,如果type不是Integer / String等,我可以检查instanceof并抛出异常.这是最好的方法吗? 在对此类型执行操作时遇到同样的问题.根据类型,我想做不同的操作.继承和有界通...

java – 冗余泛型参数【代码】

我有这两个接口和类:public interface Identifiable<T> {T getId(); }public interface GenericRepository<T extends Identifiable<K>, K> {T get(K id); }public class MyEntity implements Identifiable<Long> {private Long id;public Long getId() {return id;} }public class MyService {private GenericRepository<MyEntity, Long> myEntityRepository; }一切都按预期工作.但在我看来,GenericRepository(K)中的第二个泛型参...

java – 二阶泛型似乎与一阶泛型不同【代码】

我以为我对仿制药有一个合理的把握.例如,我理解为什么private void addString(List<? extends String> list, String s) {list.add(s); // does not compilelist.add(list.get(0)); // doesn't compile either }不编译. I even earned some internet karma with the knowledge. 但我认为这个论点不应该编译:private void addClassWildcard(List<Class<? extends String>> list, Class<? extends String> c) {list.add(c);list.add(...

java – 用于处理方向更改的http请求的AsyncTaskLoader,使用泛型,继承【代码】

目前我正在使用异步http库来对我们的服务器执行http请求.然而,这带来了一个问题,即如果在屏幕旋转期间正在进行http调用,我们将在调用结束时引用旧的上下文.我通过保持对onCreate中捕获的最新实例的静态引用来解决这个问题,并使用该引用调用方法(并在onDestroy中将其置空).它运作正常但似乎是一个黑客.我见过有人推荐使用片段来解决这个问题,比如这里: http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-con...

java – 使用和声明泛型List【代码】

所以我在Java工作,我想声明一个通用的List. 所以我到目前为止所做的是List< T> list = new ArrayList< T>(); 但现在我想添加一个元素.我怎么做?通用元素是什么样的? 我尝试过像List.add(“x”)之类的东西,看看我是否可以添加一个字符串,但这不起作用. (我没有声明List< String>的原因是因为我必须将此List传递给另一个仅将List< T>作为参数的函数.解决方法:您应该具有泛型类或通用方法,如下所示:public class Test<T> {List<T>...

Java实现泛型队列【代码】

class node{int x;int y; }public class Test {public static void main(String[] args) {MyQueue<String> q=new MyQueue<String>();q.push("xxx");q.push("xxx");q.push("xxx");q.push("你");q.push("真");q.push("666!");q.print();System.out.println(q.GetMaxSize());} }class MyQueue<T>{public int HIndex=0;public int size=0;public int MaxSize=0;public T space[];@SuppressWarnings("unchecked")public boolean push(T...

Java泛型和数组【代码】

当我针对我的单元测试运行时,下面的代码段是有意义的.我在标有“>>>>”的行上得到一个ClassCastException(Object不能转换为String).这种类型的操作可以通用吗?public class ArrayUtils<E> {public static <E> E[] appendToArray(E[] array, E item) {E[] result = (E[])new Object[array.length+1];for(int i=0; i < array.length; i++ ) {result[i] = array[i];}result[result.length-1] = item;return result;}}@Testpublic voi...