![](/img/trans.png)
[英]Is it possible to create one index for more than one column? hiberanate
[英]is it possible to create an array of more than one datatype in java If possible, how?
我想創建一個像列表一樣的數組,就像 java 中的 python3 中的那樣,但我不知道該怎么做 例如:{“John”,1,True,1.7}
是否可以在 java 中創建多個數據類型的數組如果可以,它是如何完成的?
是否可以在 java 中創建多個數據類型的數組?
不,不可能。 但你錯了——在 python 中,這也是不可能的。
訣竅是,在 Python 中,所有對象都只是“對象”,並且您有一個對象列表。 在 java 中,表達式確實有類型。 然而,所有對象都是對象。 所以:
Object[] o = {"John", 1, true, 1.7};
作品。 你真的不想要這個 - arrays 是低級結構。 你會想要List<Object> o = List.of("John", 1, true, 1.7};
毫無疑問。
另外,為什么要將其存儲在列表中? 聽起來你想要這個:
class Person {
String name;
int id;
boolean enrolled;
double gpa;
}
然后是List<Person>
。 那就是“java 方式”。 在Object[]
中丟棄這些東西不是java 方式。 在羅馬時,表現得像羅馬人。 編碼 java 時,像 java 那樣寫。 如果您不這樣做,其他任何人都無法閱讀您的代碼,並且庫對您不起作用或感覺怪異和笨拙。 如果您堅持使用“python 風格”編程,那么只需使用 python。
使用 Java 16 及更高版本中的記錄。
record Person ( String name , int talentCode , boolean isAvailable , double grading ) {}
鑒於您的{"John", 1, True, 1.7}
,我懷疑您有一組與單個實體相關的屬性,而不是與兄弟姐妹的集合。 換句話說,你有tuple 。
如果是這種情況,例如所有四個值都描述一個人,那么在 Java 中,我們將創建一個名為Person
的 class 來保存四個成員字段。 每個字段都將是適當的類型。
package work.basil.example.recs;
import java.util.Objects;
public final class Person
{
private final String name;
private final int talentCode;
private final boolean isAvailable;
private final double grading;
public Person ( String name , int talentCode , boolean isAvailable , double grading )
{
this.name = name;
this.talentCode = talentCode;
this.isAvailable = isAvailable;
this.grading = grading;
}
public String name ( ) { return name; }
public int talentCode ( ) { return talentCode; }
public boolean isAvailable ( ) { return isAvailable; }
public double grading ( ) { return grading; }
@Override
public boolean equals ( Object obj )
{
if ( obj == this ) return true;
if ( obj == null || obj.getClass() != this.getClass() ) return false;
var that = ( Person ) obj;
return Objects.equals( this.name , that.name ) &&
this.talentCode == that.talentCode &&
this.isAvailable == that.isAvailable &&
Double.doubleToLongBits( this.grading ) == Double.doubleToLongBits( that.grading );
}
@Override
public int hashCode ( )
{
return Objects.hash( name , talentCode , isAvailable , grading );
}
@Override
public String toString ( )
{
return "Person[" +
"name=" + name + ", " +
"talentCode=" + talentCode + ", " +
"isAvailable=" + isAvailable + ", " +
"grading=" + grading + ']';
}
}
使用這個 class。
Person alice = new Person( "Alice" , 1 , true , 1.7 ) ;
System.out.println( alice.getName() ) ;
愛麗絲
record
在Java 16中編寫這樣的 class 要容易得多,如果這樣的 class 的主要目的是透明且不可變地保存這些數據。
新的記錄功能讓我們可以簡單地定義一個 class,只聲明成員字段。 編譯器隱式創建構造函數、getter、 equals
& hashCode
和toString
。
記錄可以被認為是名義元組,引用 JEP 395。“名義”表示每個值都被命名,“元組”表示值的有限有序序列。
public record Person ( String name , int talentCode , boolean isAvailable , double grading )
{
}
使用此記錄。
Person alice = new Person( "Alice" , 1 , true , 1.7 ) ;
System.out.println( alice.name() ) ;
愛麗絲
記錄可以寫為單獨的 class,嵌套在另一個 class 中,甚至可以在方法中本地定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.