2017-03-27 15 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

하지만, 자바 개발자는 인터페이스가 아닌 공개 API (Effective Java, Item 18)의 구현 클래스를 사용하는 것이 좋습니다 : 다음은 코드입니다. 따라서 메타 데이터 유형을 HashMap이 아닌 java.util.Map으로 정의하는 것이 더 나을 수도 있습니다.

+0

문제가 무엇인지 정확히 아는 것이 좋지만 문제가 해결되었습니다. 인터페이스 파일이 HashMap을 사용하여 제대로 생성 된 것 같아서 j2ObjC에서 문제가되지 않을 수도 있습니다. 그래서 아마 스위프트로 연결되는 방법과 관련이 있습니다. – AdColvin