我在从Web服务(Java)返回ArrayList时遇到问题.
我编写了一个测试Web服务和客户端来使用它.所有似乎都工作正常 - 即客户端正在调用服务器,服务器接收操作请求.
但是,我编写了一个简单的方法,我希望它返回一个ArrayList.
我的接口定义如下:
@WebService
@SOAPBinding(style = Style.RPC)
public interface ISQLServerConnectionWS {
@WebMethod
ArrayList getSimpleArrayList();
}
Run Code Online (Sandbox Code Playgroud)
我有我的服务器端实现来返回ArrayList:
@WebService(endpointInterface="WebServices.ISQLServerConnectionWS")
public class SQLConnectionWSServer
implements ISQLServerConnectionWS {
@Override
public ArrayList getSimpleArrayList() {
ArrayList al = new ArrayList();
al.add( "This" );
al.add( "is" );
al.add( "a" );
al.add( "test" );
return al;
}
}
Run Code Online (Sandbox Code Playgroud)
最后我的客户打电话给它:
ArrayList results = server.getSimpleArrayList();
Run Code Online (Sandbox Code Playgroud)
服务器正好填充数组列表.但是,回到客户端,ArrayList为空.它的大小为0.
如果我在我的URL(http://127.0.0.1:9876/myservice-sql?wsdl)上检查executeSelectSQL 的WSDL ,它看起来像:
<message name="executeSelectSQLResponse">
<part name="return" type="tns:arrayList"/>
</message>
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗
编辑:
但是,如果我在界面中定义了一个web方法:
@WebMethod
String getAString();
Run Code Online (Sandbox Code Playgroud)
和服务器实现:
@Override
public String getAString() …Run Code Online (Sandbox Code Playgroud) 我有两个数组,我想知道它们是否包含相同的项目. Equals(object obj)不起作用,因为数组是引用类型.我在下面发布了我的尝试,但是因为我确定这是一项常见任务,我想知道是否有更好的测试.
public bool ContainsEquivalentSequence<T>(T[] array1, T[] array2)
{
bool a1IsNullOrEmpty = ReferenceEquals(array1, null) || array1.Length == 0;
bool a2IsNullOrEmpty = ReferenceEquals(array2, null) || array2.Length == 0;
if (a1IsNullOrEmpty) return a2IsNullOrEmpty;
if (a2IsNullOrEmpty || array1.Length != array2.Length) return false;
for (int i = 0; i < array1.Length; i++)
if (!Equals(array1[i], array2[i]))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我反映了源,并没有比较执行循环之前的长度.这是有道理的,因为该方法通常是IEnumerable<T>为a而不是为a 而设计的T[].
public static bool SequenceEqual<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
{ …Run Code Online (Sandbox Code Playgroud) 填充ArrayList的最短方法是什么?就像是:
ArrayList<Integer[]> list = new ArrayList<Integer[]>();
list.add({1,10,1,1});
list.add({2,11,1,1});
Run Code Online (Sandbox Code Playgroud)
要么:
ArrayList<Integer[]> list = ({1,10,1,1},{2,11,1,1});
Run Code Online (Sandbox Code Playgroud) 我想保持我的子类通用,我想要改变的是add(Object)ArrayList 的方法,这样当你调用时它不会添加任何东西arrayList.add(null)(ArrayList的正常实现将添加null;我希望它什么都不做).
我有一个方法如下,这个方法包含两个arraylist("eventList"和"emailList").
List<EmailUID> emailid=SharedEvent.getEmailUid(filter, uri, exchWD, EmailShare);
public static List<EmailUID> getEmailUid(Filter filter, String uri, NexWebDav exchWD,
List<String> emailShare)
List eventsToday = null;
List<EmailUID> arrayList = new ArrayList<EmailUID>();
List<EmailUID> emailList = new ArrayList<EmailUID>();
List<EmailUID> eventList = new ArrayList<EmailUID>();
for (String email : emailShare) {
String uris = uri + email + "/events/";
InputStream stream = null;
try {
stream = exchWD.get(uris);
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
CalendarBuilder builder = new CalendarBuilder();
net.fortuna.ical4j.model.Calendar calendar = builder.build(br);
//eventsToday.add(email);
eventsToday = (List<?>) filter.filter(calendar.getComponents(Component.VEVENT));
arrayList=getEmailUID(eventsToday,email); …Run Code Online (Sandbox Code Playgroud) 我想在Java中为ArrayList创建自己的toString()方法.但是,即使我将这样的toString()添加到包含ArrayList的类中,我也无法使其工作.
@Override
public String toString() {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
当我像这样调用我的ArrayList时list.toString(),我仍然得到默认表示.我错过了什么吗?
Eclipse显示了一个类型安全警告,我尝试了几乎所有东西来消除它(当然压制它将是一个选项)但不幸的是我没有任何成功.
你知道我如何更改我的代码,以便不再有类型安全警告.或者是@SuppressWarnings("unchecked")唯一的方法?
ArrayList<String> arrayList= (ArrayList<String>) Classname.getArrayList();
JSONArray obj = new JSONArray();
obj.addAll(arrayList);
Run Code Online (Sandbox Code Playgroud)
在显示类型安全警告的最后一行:
类型安全:方法addAll(Collection)属于原始类型ArrayList.应该参数化对泛型类型ArrayList的引用
JSONArray来自org.json.simple.JSONArray.你会推荐另一个套餐吗?
我知道WeakReference,如果我做了WeakReference一些东西,除非直接引用它,它将是下一个GC循环收集的垃圾.我的问题是,如果我做出ArrayList的WeakReferenceS'
例如:
ArrayList<WeakReference<String>> exArrayList;
exArrayList = new ArrayList<WeakReference<String>>();
exArrayList.add(new WeakReference<String>("Hello"));
Run Code Online (Sandbox Code Playgroud)
我现在可以访问数据了exArrayList.get(0).get().
我的问题变成了:这是WeakReference数据,exArrayList.get(0)下一个GC循环中的数据是否会被GC进行?(即使我没有另外直接引用它)或者这个特定的参考是否会一直存在直到arraylist被清空?(例如:) exArrayList.clear();.
如果这是重复,我没有在谷歌中找到我的关键字.
有没有办法找到最常见String的ArrayList?
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("test");
list.add("hello");
list.add("test");
Run Code Online (Sandbox Code Playgroud)
应该从这个列表中找到"test"这个词 ["test","test","hello","test"]
ArrayList构造函数的 JDK doc 表示初始容量为10.
这实际上是错误的,因为初始容量为0,直到将某些内容添加到列表中.我检查了Open JDK的源代码以及JDK附带的src.zip.
我知道这是性能优化,但这会被视为错误吗?
arraylist ×10
java ×9
arrays ×2
android ×1
c# ×1
comparison ×1
generics ×1
json ×1
list ×1
overriding ×1
performance ×1
service ×1
tostring ×1
type-safety ×1