Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建一个可以直接赋值的类_Java_Class_Classloader - Fatal编程技术网

Java 如何创建一个可以直接赋值的类

Java 如何创建一个可以直接赋值的类,java,class,classloader,Java,Class,Classloader,也许标题会误导你 String str ="abcd"; 在上面的代码中,String是一个类,不使用new,我们可以创建一个有值的对象。现在我有一个class Number.java,在其中我必须分配一些数字,如下所示 Number no = 23; 如何创建这样的类 我通常会说应该使用运算符重载。但是这个特性在Java中并不存在 请参见此处:您不能 Java编译器只是为您提供了一个语法快捷方式 从: […]字符串文字[是]代码中的一系列字符 用双引号括起来。每当遇到字符串文字时 在代码中

也许标题会误导你

String str ="abcd";
在上面的代码中,String是一个类,不使用new,我们可以创建一个有值的对象。现在我有一个class Number.java,在其中我必须分配一些数字,如下所示

Number no = 23;

如何创建这样的类

我通常会说应该使用运算符重载。但是这个特性在Java中并不存在

请参见此处:

您不能

Java编译器只是为您提供了一个语法快捷方式

从:

[…]字符串文字[是]代码中的一系列字符 用双引号括起来。每当遇到字符串文字时 在代码中,编译器使用其值创建字符串对象


不能像字符串一样直接为对象赋值

如果您真的想实现同样的目标,我建议您创建一个预定义初始化对象的工厂,并使用pattern或pattern从工厂获取所需的对象

示例代码:

import java.util.concurrent.atomic.*;

public class PrototypeFactory
{
    public class NumberPrototype
    {
        public static final String THIRTY_TWO = "32";
        public static final String FORTY_ONE = "41";

    }

    private static java.util.Map<String , AtomicInteger> prototypes = new java.util.HashMap<String , AtomicInteger>();

    static
    {
        prototypes.put(NumberPrototype.THIRTY_TWO, new AtomicInteger(32));
        prototypes.put(NumberPrototype.FORTY_ONE, new AtomicInteger(43));

    }

    public static AtomicInteger getInstance( final String s) {
        //return (AtomicInteger)(prototypes.get(s)).clone();
        return ((AtomicInteger)prototypes.get(s));
    }
    public static void main(String args[]){
        System.out.println("Prototype.get(32):"+PrototypeFactory.getInstance(NumberPrototype.THIRTY_TWO));
    }
}

实际上,由于自动装箱,这种类型的赋值确实适用于原始包装器类

Integer n = 23;

不能这样做,因为原语值是java语言的一部分,如果你想让一个类像这样被“初始化”,你应该将它添加到java解析或类似的东西中。

想想,你将如何告诉编译器你给这个类分配了什么样的对象?
Integer n = 23;