0

アロハ。

Object[] を返すはずの @Get メソッドを持つ Restlet サーバー アプリケーションがありますが、クライアントは LinkedHashMap 型の要素を持つ Object[] を受け取ります。受信した配列の各要素は、サーバーが送信するはずだったオブジェクトのそれぞれの要素に対応しています。

私のリソース(インターフェース)ファイルの関連部分は次のとおりです。

@Get
public Object[] retrieve() ;

サーバーリソースファイルの関連部分は次のとおりです。

public Object[] retrieve()
{

  User newUser = new User() ;
  newUser.firstName = "John" ;
  newUser.lastName = "Doe" ;

  Object[] objectArray = (Object[]) Array.newInstance( User.class, 1 ) ;
  objectArray[0] = newUser ;

  return objectArray ;

}

私のクライアントの関連部分は次のとおりです。

public static void main( String[] args ) throws Exception
{
  Object[] arrayOfObjects = (Object[]) clientResource.retrieve() ;   //  array of LinkedHashMap elements
}

取得したい結果を簡単に取得できると思いますが、Restlet フレームワークにはまだ慣れていません。したがって、誰かが私が間違っていることを教えて、サーバーから (JSON エンコードされた) オブジェクトの配列を正しく送信する方法の例を教えてもらえますか?

前もって感謝します。

気をつけて、
ダーウィン

================================================== ================================

アップデート

StaxMan のコメント (下記) に従って、一般的な List を返そうとしましたが、これは、目的の要素の型の ArrayList ではなく、LinkedHashMap 要素の ArrayList になりました。

私のリソース(インターフェース)ファイルの関連部分は次のとおりです。

@Get
public <T> List<T> retrieve() ;

サーバーリソースファイルの関連部分は次のとおりです。

public <T> List<T> retrieve()
{
  List<T> list = ... ;
  return list ;
}

私のクライアントの関連部分は次のとおりです。

//  the following does not work, since the returned ArrayList's
//  elements are not User objects but LinkedHashMap objects:
User[] users = (User[]) ((ArrayList<User>)clientResource.<User>retrieve()).toArray( (User[])Array.newInstance(User.class,0) ) ;

サーバーのジェネリック (または疑似ジェネリック) の性質を維持しながら、サーバーから必要なオブジェクトの Array または List または ArrayList を取得する方法を誰か教えてもらえますか?

前もって感謝します。

4

1 に答える 1

0

これは、aListが a であるためjava.lang.Objectです -- オブジェクトのリストを要求し、取得しているからです。追加の型情報がなければ、取得できるのはほとんどこれだけです。あなたの場合、むしろ返す必要がありますUser[](またはList<User>

于 2013-02-06T04:45:50.283 に答える