web-dev-qa-db-fra.com

initialiser l'objet directement en java

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!

25
satvinder singh

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!

39
Bohemian

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);
4
aioobe

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.

4
Feng

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");
3
CBredlow

Il existe deux types de constructeurs en Java. 

  1. Constructeur par défaut 
  2. Constructeur paramétré

Vous devez créer un constructeur paramétré pour créer votre objet. 

0
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);
0
M. Abbas
    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
0
charu

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.

0
Oscar Gomez