2017-01-11 9 views
0

Я пытаюсь создать массив с 2 значениями для каждого элемента, как значение с настраиваемым заголовком, и, исходя из Ruby, не может найти правильный способ сделать это на Java.Массив с 2 значениями на элемент

Это для тестов, проведенных REST, которые мне нужно автоматизировать.

Это метод, который я должен сделать, я смешиваю декларацию OBJ с какой-рубинового способ сделать это, так что необходимость его более ясным:

private String[] getHeaders() { 
    String[] obj = [ 
      'Signature' => this.getSignature(), 
      'Timestamp' => this.getTimestamp(), 
      ]; 

     if(getSessionToken() != null) { 
      obj.sessionToken = this.getSessionToken(); 
     } 
    } 
} 
+8

Сделайте особый тип с двумя значениями, которые вас интересуют. Создайте массив такого типа. – azurefrog

+2

Вы можете создать отдельный класс модели, который представляет то, что вам нужно, и внутри него есть 2 поля, подпись и временная метка. Затем объявите массив этого класса, например. 'MyClass [] objects = new MyClass [10];'. – Vucko

+0

Именно то, что @azurefrog говорило немного передо мной: D – Vucko

ответ

3

Вы можете достичь этого, создав модель. Например:

public class MyModel { 
    private String signature; 
    private String timestamp; 

    public MyModel() { 
     // constructor 
    } 

    public MyModel(String signature, String timestamp){ 
     this.signature = signature; 
     this.timestamp = timestamp; 
    } 

    public String getSignature() { 
     return signature; 
    } 

    public void setSignature(String signature) { 
     this.signature = signature; 
    } 

    public String getTimestamp() { 
     return timestamp; 
    } 

    public void setTimestamp(String timestamp) { 
     this.timestamp = timestamp; 
    } 
} 

Затем создайте массив своей модели. Вы можете использовать:

private static final int MODEL_SIZE = 5; 
private MyModel[] models = new MyModel[MODEL_SIZE]; 

Если вы уже знаете размер вашего массива. Или вы можете использовать этот подход ниже, если вы не знаете размер массива еще:

private ArrayList<MyModel> models = new ArrayList<>; 
private MyModel model; 

// Then fill your models 

// by using this way 
model = new MyModel("My Signature", "My Timestamp"); 
models.add(model); 

// or this way 
model = new MyModel(); 
model.setSignature("My Signature"); 
model.setTimestamp("My Timestamp"); 
models.add(model); 

Другой способ добиться того, что без создания модели является использование HashMap. Это пример:

List<HashMap<String, String>> objects = new ArrayList<>(); 

HashMap<String, String> object = new HashMap<>(); 
object.put("signature", "My Signature"); 
object.put("timestamp", "My Timestamp"); 

objects.add(object); 
+0

Мне нравится HashMap способ сделать это, но Im получаю ошибки, несколько маркеров на этой линии \t - ошибка синтаксиса, вставить «VariableDeclarators», чтобы завершить \t LocalVariableDeclaration \t - ошибка синтаксиса, вставить «;» для завершения BlockStatements \t - Невозможно вывести аргументы типа для HashMap <> –

+0

Я решил их, это была ошибка определения с моей стороны, спасибо! –

1

Что-то вроде этого, я подозреваю, что ты хочешь.

class Headers{ 
     public String signature; 
     public String timeStamp; 
    } 
    Headers[] header = new Headers[10]; 

Вам, вероятно, не нужны геттеры и сеттеры, но вы можете бросить их тоже.