2017-03-27 3 views
0

Swiftアプリケーションで使用しているメタデータ(タイプHashMap<String, String>)というHashMapを持つオブジェクトがあります。J2ObjC JavaUtilHashMapがSwiftに表示されない

オブジェクトのその他すべてのプロパティは、Swift(ブリッジヘッダー経由)からアクセスできますが、メタデータはありません。

Javaでこの型を定義する際に注意する必要があることはありますか?ここで コードです:

package com.superpixel.advokit.temple8.domain; 

import com.superpixel.advokit.temple8.api.network.ApiCallback; 

import java.util.Date; 
import java.util.HashMap; 

public class User extends ApiResource { 

    private String id; 
    private boolean isLive; 
    private Date created; 
    private Date updated; 
    private String email; 
    private String forename; 
    private String surname; 

    private HashMap<String, String> metadata; 

    // -- API 

    public static void get(String id, ApiCallback<User> callback) { 
     apiService.get(User.class, "https://stackoverflow.com/users/" + id, callback); 
    } 

    // -- Accessors 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public boolean isLive() { 
     return isLive; 
    } 

    public void setLive(boolean live) { 
     isLive = live; 
    } 

    public Date getCreated() { 
     return created; 
    } 

    public void setCreated(Date created) { 
     this.created = created; 
    } 

    public Date getUpdated() { 
     return updated; 
    } 

    public void setUpdated(Date updated) { 
     this.updated = updated; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getForename() { 
     return forename; 
    } 

    public void setForename(String forename) { 
     this.forename = forename; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

    public HashMap<String, String> getMetadata() { 
     return metadata; 
    } 

    public void setMetadata(HashMap<String, String> metadata) { 
     this.metadata = metadata; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     User user = (User) o; 

     if (isLive != user.isLive) return false; 
     if (id != null ? !id.equals(user.id) : user.id != null) return false; 
     if (created != null ? !created.equals(user.created) : user.created != null) return false; 
     if (updated != null ? !updated.equals(user.updated) : user.updated != null) return false; 
     if (email != null ? !email.equals(user.email) : user.email != null) return false; 
     if (forename != null ? !forename.equals(user.forename) : user.forename != null) return false; 
     if (surname != null ? !surname.equals(user.surname) : user.surname != null) return false; 
     return metadata != null ? metadata.equals(user.metadata) : user.metadata == null; 

    } 

    @Override 
    public int hashCode() { 
     int result = id != null ? id.hashCode() : 0; 
     result = 31 * result + (isLive ? 1 : 0); 
     result = 31 * result + (created != null ? created.hashCode() : 0); 
     result = 31 * result + (updated != null ? updated.hashCode() : 0); 
     result = 31 * result + (email != null ? email.hashCode() : 0); 
     result = 31 * result + (forename != null ? forename.hashCode() : 0); 
     result = 31 * result + (surname != null ? surname.hashCode() : 0); 
     result = 31 * result + (metadata != null ? metadata.hashCode() : 0); 
     return result; 
    } 

} 

答えて

0

私はスウィフト、開発者じゃないので、決定的な答えを持っていますが、Java開発者は、公開API(Effective Java, Item 18)のインターフェイスではなく、実装クラスを使用することはお勧めしません。したがって、メタデータの型をHashMapではなくjava.util.Mapとして定義するほうがよいかもしれません。

+0

これは私の問題を解決しましたが、問題の内容を正確に知ることはうれしいでしょう。インターフェイスファイルがHashMapを使用していても正しく生成されているように見えるので、j2ObjCの問題ではないかもしれません。だから多分それはスウィフトにどのように橋渡しされているかと関係があります。 – AdColvin

関連する問題