首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个框架实现是如何工作的?

这个框架实现是如何工作的?
EN

Stack Overflow用户
提问于 2010-12-13 15:14:00
回答 1查看 1.6K关注 0票数 1

这个程序来自effective java第二版,我不明白int[]是如何转换成列表的。有人能帮我解释一下吗。软件包示例。第4章,第18条;

代码语言:javascript
复制
// Concrete implementation built atop skeletal implementation - Page 95


import java.util.*;



public class IntArrays {

static List<Integer> intArrayAsList(final int[] a) { 
            if (a == null)
         throw new NullPointerException();

 return new AbstractList<Integer>() {
     public Integer get(int i) {
  return a[i]; // Autoboxing (Item 5)
     }

     @Override
     public Integer set(int i, Integer val) {
  int oldVal = a[i];
  a[i] = val; // Auto-unboxing
  return oldVal; // Autoboxing
     }

     public int size() {
  return a.length;
     }
 };
    }

    public static void main(String[] args) {
 int[] a = new int[10];
 for (int i = 0; i < a.length; i++)
     a[i] = i;
 List<Integer> list = intArrayAsList(a);

 Collections.shuffle(list);
 System.out.println(list);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-13 16:39:00

该示例提供了一种快速将原始int数组包装成整数LIst的方法。在内部,它使用自动装箱在int和Integer之间进行转换。该技术可能很有用,因为在int[]和List之间没有类似转换。

基本技术是构建AbstractList的匿名实现。

代码语言:javascript
复制
public class IntArrays {

     static List<Integer> intArrayAsList(final int[] a) { 
     if (a == null)
         throw new NullPointerException();


     return new AbstractList<Integer>() {
         // code here
     }
}

这里的诀窍是final int[] a可用于实现方法。

在此之后,我们只需要提供AbstractList定义的接口的实现方法,即方法get()、set()和size()。

所以这些都很明显,很好地利用了自动装箱。

代码语言:javascript
复制
 public Integer get(int i) {
          return a[i]; // Autoboxing (Item 5)
 }


 public Integer set(int i, Integer val) {
       int oldVal = a[i];
       a[i] = val; // Auto-unboxing
       return oldVal; // Autoboxing
 }

 public int size() {
     return a.length;
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4426530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档