2015-12-10 2 views
3

Может быть, заголовок будет вводить вас в заблуждение.Как создать класс, в котором мы можем напрямую присвоить значение

String str ="abcd"; 

В приведенном выше коде String является классом и без использования нового мы можем создать объект со значением. Теперь у меня есть класс Number.java, в котором я должен назначить некоторый номер, как показано ниже.

Number no = 23; 

Как создать такой класс.

+0

Подумайте, как вы скажете компилятору, какой объект вы назначаете классу? –

ответ

0

Я бы сказал, что вы должны использовать перегрузку оператора. Но эта функция не существует в Java.

Смотрите здесь: Operator overloading in Java

0

Вы не можете.

Компилятор Java просто предоставляет вам синтаксический ярлык.

От Java Tutorial:

[...] строковая [это] последовательность символов в коде, который заключен в двойных кавычках. Всякий раз, когда он встречает строковый литерал в коде, компилятор создает объект типа String со значением

0

Вы не можете непосредственно присвоить значение Object, как String.

Если вы действительно хотите достичь того же, я бы предложил вам создать фабрику с заранее определенными инициализированными объектами и получить требуемый объект из Factory с помощью шаблона Prototype или шаблона FactoryMethod.

Пример кода:

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)); 
    } 
} 

выход:

Prototype.get(32):32 
0

На самом деле этот тип присвоения делает работу для примитивных классов оберток из-за авто-бокс

Integer n = 23; 
0

Вы можете» t, поскольку примитивные значения являются частью языка java, если вы хотите, чтобы класс был «инициализирован», как что вы должны добавить его в java-синтаксис или что-то в этом роде.

Смежные вопросы