Est-il possible d'initialiser directement un objet comme on peut le faire avec la classe String en Java:
tel que:
String str="something...";
Je veux faire la même chose pour mon cours personnalisé:
class MyData{
public String name;
public int age;
}
est-ce possible comme
MyClass obj1={"name",24};
ou
MyClass obj1="name",24;
initialiser un objet? ou comment cela peut être possible!
Normalement, vous utiliseriez un constructeur, mais ce n'est pas obligatoire!
Voici la version du constructeur:
public class MyData {
private String name;
private int age;
public MyData(String name, int age) {
this.name = name;
this.age = age;
}
// getter/setter methods for your fields
}
qui est utilisé comme ceci:
MyData myData = new MyData("foo", 10);
Cependant, si vos champs sont protected
ou public
, comme dans votre exemple, vous pouvez le faire sans définir un constructeur. En Java, c’est le moyen le plus proche de ce que vous voulez:
// Adding special code for pedants showing the class without a constuctor
public class MyData {
public String name;
public int age;
}
// this is an "anonymous class"
MyData myData = new MyData() {
{
// this is an "initializer block", which executes on construction
name = "foo";
age = 10;
}
};
Voila!
Je le sais avec les constructeurs, mais y a-t-il une autre solution?
Non, il n'y a pas d'alternative aux constructeurs.
C'est fondamentalement l'une des garanties fondamentales de la langue. Un objet ne peut pas être construit autrement que par l'intermédiaire de ses constructeurs et il n'y a pas d'autre syntaxe que la fonction new ConstructorName(...)
habituelle.
L'idée la plus proche que je puisse trouver serait d'avoir une méthode de fabrique statique appelée par exemple, mc
:
class MyClass {
...
public static mc(String name, int age) {
return new MyClass(name, age);
}
}
et ensuite faire
import static some.pkg.MyClass.mc;
...
MyClass obj1 = mc("name",24);
Si vous avez une personne de classe:
public class Person {
private String lastName;
private String firstName;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
Vous pouvez réellement créer un nouvel objet Personne et initialiser ses prénoms et noms avec:
Person person = new Person(){{
setFirstName("My FirstName");
setLastName("MyLastName");
}}
Ceci est utilisé assez souvent lors de la définition de Spring Configuration à l'aide de code Java au lieu d'une configuration XML.
Vous devez créer une méthode constructeur pour l'objet, qui intègre les paramètres des champs pour lesquels vous souhaitez des valeurs.
Exemple:
public myClass( int age, String name)
{
this.age = age;
this.name = name;
}
Ensuite, dans la classe, vous voulez ceci:
myClass class = new myClass(24, "name");
Il existe deux types de constructeurs en Java.
Vous devez créer un constructeur paramétré pour créer votre objet.
class MyData{
public MyData(String name, int age) {
this.name = name;
this.age = age;
}
public String name;
public int age;
}
Ensuite, vous pouvez instancier votre classe de cette façon:
MyData myData = new MyData("name", 24);
package com.company;
public class InitializationOfObject {
int a ;
int b ;
InitializationOfObject(){
}
InitializationOfObject( int r , int n){
this.a = r;
this.b = n;
System.out.println("Object initialization by constructor ");
}
void methodInitialization(int k, int m){
System.out.println("object initialization via method");
this.a = k;
this.b = m;
}
void display(){
System.out.println("k = " +a+ "m = "+b);
}
public static void main(String... arg){
InitializationOfObject io = new InitializationOfObject();
InitializationOfObject io2 = new InitializationOfObject(45,65);
io.a = io2.a;
io.b = io2.b;
io.display();
io.methodInitialization(34,56);
io.display();
io.a = 12;
io.b = 24;
System.out.println("object initialization via refrence");
System.out.println("a = "+io.a+" "+ " b ="+io.b);
}
}
// Objet initialisé par constructeur
k = 45m = 65
initialisation d'objet via la méthode
k = 34m = 56
initialisation d'objet via référence
a = 12 b =24
C'est possible avec les mots-clés new et using constructors, mais pas comme String, c'est un type d'objet très spécial.