2017-11-16 11 views
2
abstract class Coin{ 
    String name; 
    String currency; 


    class EUR extends Coin{ 
     EUR() { 
     super("EUR", "€"); 
     } 

    } 
    class USD extends Coin{ 
     USD() { 
     super("USD", "$"); 
     } 

    } 

    private Coin (String name, String currency){ 
    this.name = name 
    this.currency = currency} 
    } 

class Person{ 
    ///variables 
    Coin coin; 

    Person(//Variables, Coin coin){ 
     //Other assignments 
     this.coin = coin 
    } 

} 

基本的に、新しいEURを作成せずに、EURを渡す人をコインとして初期化したいと考えています。その後、クラスを定数として扱う

static final EUR euro = EUR 

など 何か:私は毎回新しいEUR

私は私ができる知っているを作成したくないので、

Person person = new Person(... , euro); 

私はユーロのインスタンスの数百万人を必要としません一定の文字列を使ってこのようなことをしてください。しかし実際にはCoinオブジェクトを渡したいと思っています

私はこのようなCoinクラスの中でEURを初期化しようとしました

static EUR euro = new EUR(); 

しかし、IDEは、これはこれは、列挙型のための完璧な仕事であるスレッドのデッドロックに

+3

クラスではなくenumを試してみますか? – Fureeish

+1

enum –

+1

を使用する必要がありますか、 'public static final Coin EUR = new Coin(" EUR "、"€ ");' –

答えて

5

を引き起こす可能性が私を警告している:あなたはそれを定義したら

public enum Coin { 
    EUR("EUR", "€"), 
    USD("USD", "$"); 

    private String name; 
    private String currency; 

    private Coin(String name, String currency) { 
     this.name = name; 
     this.currency = currency; 
    } 
} 

、あなたがenum定数を使用することができます:

Person person = new Person(... , Coin.EUR); 
+0

を定義することができます。これは非常に素晴らしいソリューションです。解決策として – lugiank

+1

@lugiankおそらく他の回避策がありますが、この問題は具体的には 'enum'がデザイナーになったものです。私はこの問題に対するより良い解決策/答えが存在しないことを賭けても構わないと思う。これを受け入れることを検討してください。他の人が実際に問題をエレガントに解決することがわかります – Fureeish