我试图使用removeRange
方法从中删除某些元素ArrayList
.我从这里开始了解这个方法:http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#removeRange(int,int)
但是,当我尝试这样的时候
ArrayList<String> al = new ArrayList<String>();
al.add("AB");
al.add("BC");
al.add("CD");
al.add("DE");
al.removeRange(1, 3);
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method removeRange(int, int) from the type ArrayList<String> is not visible
Run Code Online (Sandbox Code Playgroud)
为什么我无法使用此方法?难道我做错了什么?
Ren*_*ink 13
简短的回答是:使用
al.subList(1, 3).clear();
Run Code Online (Sandbox Code Playgroud)
该removeRange(int, int)
方法protected
.您只能从ArrayList
同一个包中的类的子类调用它ArrayList
.请参阅控制对类成员的访问.
访问该removeRange
方法的唯一方法是子类化ArrayList
并使该方法公开.例如
public class RangeRemoveSupport<E> extends ArrayList<E> {
public void removeRange(int fromIndex, int toIndex) {
super.removeRange(fromIndex, toIndex);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您的代码必须使用子类.因此,您的代码依赖于此子类,而不仅仅取决于List
或ArrayList
.
无法在同一个包中访问它的实用程序类.例如
package java.util; // <- SecurityException
public class RemoveRangeSupport {
public static void removeRange(ArrayList<?> list, int from, int to){
list.removeRange(from, to);
}
}
Run Code Online (Sandbox Code Playgroud)
这将导致一个 SecurityException
java.lang.SecurityException: Prohibited package name: java.util
.
因为java.util
出于安全原因,不允许您定义类.
然而,对于其他包装,它可能是一种方式.
我经常使用这种策略进行测试.然后我将这样的实用程序类放在与生产代码相同的包中,以便从通常无法访问的测试中访问某些内部.这是一种不使用框架的简单方法.
编辑
是否有一个功能可以将范围X..Y中的物品替换为可能不同尺寸的新物品?
例如:这个列表"0,1,2,3,4",我从1..3替换为"a,b,c,d,e",将导致:"0,a,b,c, d,E,4" .
List<String> list = new ArrayList<>(Arrays.asList("0", "1", "2", "3", "4"));
List<String> subList = list.subList(1, 4);
subList.clear();
subList.addAll(Arrays.asList("a", "b", "c", "d", "e"));
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)
将输出
[0, a, b, c, d, e, 4]
Run Code Online (Sandbox Code Playgroud)
Sur*_*tta 12
由于它是受保护的方法,因此只对类,包和子类可见.
protected修饰符指定只能在其自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问该成员.
Modifier Class Package Subclass World
---------------------------------------------
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
Run Code Online (Sandbox Code Playgroud)
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
归档时间: |
|
查看次数: |
14765 次 |
最近记录: |