Инициализировать объект непосредственно в java
Возможно ли инициализировать объект напрямую, как мы можем сделать с классом String в java:
например:
String str="something...";
Я хочу сделать то же самое для своего пользовательского класса:
class MyData{
public String name;
public int age;
}
возможно, как
MyClass obj1={"name",24};
или
MyClass obj1="name",24;
для инициализации объекта?
или как это возможно!
Ответы
Ответ 1
Обычно вы должны использовать конструктор, но вам не нужно!
Здесь версия конструктора:
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
}
который используется следующим образом:
MyData myData = new MyData("foo", 10);
Однако, если ваши поля protected
или public
, как в вашем примере, вы можете сделать это без определения конструктора. Это самый близкий путь в java к тому, что вы хотите:
// 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!
Ответ 2
Я знаю, что с конструкторами, но любой альтернативный способ присутствует или нет?
Нет, альтернативы конструкторам не существует.
Это в основном одна из основных гарантий языка. Объект не может быть сконструирован никакими другими средствами, кроме его конструкторов, и нет альтернативного синтаксиса, чем обычный new ConstructorName(...)
.
Ближайшей идеей, которую я могу придумать, было бы иметь статический метод factory, называемый say, mc
:
class MyClass {
...
public static mc(String name, int age) {
return new MyClass(name, age);
}
}
а затем do
import static some.pkg.MyClass.mc;
...
MyClass obj1 = mc("name",24);
Ответ 3
Если у вас есть класс Person:
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;
}
}
Фактически вы можете создать новый объект Person и инициализировать его имя firstName и lastName со следующим:
Person person = new Person(){{
setFirstName("My FirstName");
setLastName("MyLastName");
}}
Это используется довольно часто при определении конфигурации Spring с использованием кода Java вместо конфигурации XML.
Ответ 4
Вы должны создать метод конструктора для объекта, который принимает параметры полей, для которых вы хотите значения.
Пример:
public myClass( int age, String name)
{
this.age = age;
this.name = name;
}
Затем в классе вы хотите это:
myClass class = new myClass(24, "name");
Ответ 5
Это возможно с ключевым словом new и использованием конструкторов, но не как String, это особый вид объекта.
Ответ 6
class MyData{
public MyData(String name, int age) {
this.name = name;
this.age = age;
}
public String name;
public int age;
}
Затем вы можете создать экземпляр класса следующим образом:
MyData myData = new MyData("name", 24);
Ответ 7
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);
}
}
//Инициализация объекта конструктором
k = 45m = 65
инициализация объекта с помощью метода
k = 34m = 56
инициализация объекта через ссылку
a = 12 b =24
Ответ 8
Нет альтернативы конструкторам (вместе с новым оператором) в java во время инициализации объекта. Вы упомянули как
Строка str = "something"
вы можете инициализировать строку таким образом, потому что String является литералом в java. Только литералы могут быть инициализированы таким образом. Компонный объект не может инициализироваться, но может быть создан только с новым оператором с конструкторами.