Структурированный массив в Java
Я пытаюсь перенести мой код Objective C в Java, чтобы выучить этот язык программирования.
Я хотел бы "преобразовать" следующую структуру ObjectiveC в Java, но я не смог найти эквивалентную структуру Java:
g_vo2MaxFemales = @[
@{
@"fromAge": @(13),
@"tillAge": @(19),
@"beginner": @(29.95),
@"regular": @(36.95),
@"pro": @(40.5)
},
@{
@"fromAge": @(20),
@"tillAge": @(29),
@"beginner": @(28.25),
@"regular": @(35),
@"pro": @(39)
}
...
];
Какой похожий Java "объект"?
5 ответов
Попробуйте этот код:
Descriptor.java
public class Descriptor {
private int fromAge;
private int tillAge;
private float beginner;
private float regular;
private float pro;
// CONSTRUCTORS
public Descriptor() {}
public Descriptor(int fromAge, int tillAge, float beginner, float regular, float pro) {
this.fromAge = fromAge;
this.tillAge = tillAge;
this.beginner = beginner;
this.regular = regular;
this.pro = pro;
}
// SETTER
public void setTillAge(int tillAge) {
this.tillAge = tillAge;
}
public void setFromAge(int fromAge) {
this.fromAge = fromAge;
}
public void setBeginner(float beginner) {
this.beginner = beginner;
}
public void setRegular(float regular) {
this.regular = regular;
}
public void setPro(float pro) {
this.pro = pro;
}
// GETTER
public int getTillAge() {
return tillAge;
}
public int getFromAge() {
return fromAge;
}
public float getBeginner() {
return beginner;
}
public float getRegular() {
return regular;
}
public float getPro() {
return pro;
}
}
Затем в вашем классе деятельности MainActivity.java
Вы можете объявить структуру для мужчин и другую для женщин
Descriptor[] descriptorMale = {
new Descriptor(13, 19, 5f, 7f, 9f),
new Descriptor(20, 29, 6f, 13f, 16f),
new Descriptor(30, 39, 7f, 18f, 19f),
new Descriptor(40, 49, 8f, 29f, 33f),
new Descriptor(50, 59, 9f, 30f, 37f),
new Descriptor(60, 120, 10f, 41f, 44f)
};
Descriptor[] descriptorFemale = {
new Descriptor(13, 19, 5f, 7f, 9f),
new Descriptor(20, 29, 6f, 13f, 16f),
new Descriptor(30, 39, 7f, 18f, 19f),
new Descriptor(40, 49, 8f, 29f, 33f),
new Descriptor(50, 59, 9f, 30f, 37f),
new Descriptor(60, 120, 10f, 41f, 44f)
};
Наконец, вы можете использовать методы getter/setter следующим образом:
descriptorMale[1].getBeginner();
descriptorFemale[3].setFromAge(18);
Это легко, если у вас есть YourClass
класс и конструктор со всеми полями экземпляра. Просто создайте массив YourClass
,
YourClass[] array = {
new YourClass(13, 19, 29.95, 36.95, 40.5),
new YourClass(...),
...
};
Класс будет выглядеть
class YourClass {
private int fromAge;
private int tillAge;
private double beginner;
private double regular;
private double pro;
public YourClass(int fromAge, int tillAge, double beginner, double regular, double pro) {
this.fromAge = fromAge;
this.tillAge = tillAge;
this.beginner = beginner;
this.regular = regular;
this.pro = pro;
}
}
Имена полей не красивые, я использовал имена OP для его понимания.
С Project Lombok вы могли бы написать @AllArgsConstructor
аннотации над классом, а не писать этот массивный конструктор. Он будет сгенерирован для вас на этапе компиляции.
Класс будет выглядеть так.
public class MaxFemales {
private int fromAge;
private int tillAge;
private double beginner;
private double regular;
private double pro;
public MaxFemales(int fromAge, int tillAge, double beginner, double regular, double pro) {
this.fromAge = fromAge;
this.tillAge = tillAge;
this.beginner = beginner;
this.regular = regular;
this.pro = pro;
}
public int getFromAge() {
return fromAge;
}
public void setFromAge(int fromAge) {
this.fromAge = fromAge;
}
public int getTillAge() {
return tillAge;
}
public void setTillAge(int tillAge) {
this.tillAge = tillAge;
}
public double getBeginner() {
return beginner;
}
public void setBeginner(double beginner) {
this.beginner = beginner;
}
public double getRegular() {
return regular;
}
public void setRegular(double regular) {
this.regular = regular;
}
public double getPro() {
return pro;
}
public void setPro(double pro) {
this.pro = pro;
}
}
Где вы хотите использовать его, создайте ArrayList<MaxFemales> mFemaleList = new ArrayList<MaxFemales>();
Создайте класс, предоставив все аргументы и просто добавьте его в список массивов.
Надеюсь это поможет.
Вы можете реализовать это в Java с помощью ArrayList.
Пример кода:
class ModelObject {
private Integer fromAge;
private Integer tillAge;
// followed by the other attributes
public ModelObject(Integer fromAge, Integer tillAge, ...){
this.fromAge = fromAge;
this.tillAge = tillAge;
}
public Integer getFromAge(){
return this.fromAge;
}
public Integer getTillAge(){
return this.tillAge;
}
//getter for the outher attributes
public void setFromAge(Integer fromAge){
this.fromAge = fromAge;
}
public void setTillAge(Integer tillAge){
this.tillAge = tillAge;
}
//setter for the outher attributes
public static void main(String[] args) {
List<ModelObject> list = new ArrayList<ModelObject>();
list.add(new ModelObject(fromAge, tillAge, ...));
}
}
Словари называются картами на Java. Вместо того, чтобы копировать и вставлять код, подобный этому, я бы предложил немного почитать о различных типах Java-карт. Они не являются концептуально сложными для понимания, если вы понимаете словари и работаете почти одинаково.