2012-03-06 42 views
1

我創建使用與對靜態數組的Java類值

MyClass class1 = new MyClass(ClassA.StaticSet1, ClassA.StaticCoef1); 
MyClass class2 = new MyClass(ClassB.StaticSet1, ClassB.StaticCoef1); 

一定的階級,所以我想收集所有這些靜態值在一個類中,並使用類似

MyClass class1 = new MyClass(TopClass.Obj1); 
MyClass class2 = new MyClass(TopClass.Obj2); 

打電話給他們其中Obj1和Obj2是包含上述值對的靜態實體。

我所能做的是創造內部TOPCLASS靜態類和擴展一個基類 最接近的東西,所以我得到了這個醜陋的實施

Public class TopClass{ 
    public static class Base{ 
     public String set[]; 
     public double coef[]; 
     public Base(s, c){ 
      set = s; 
      coef = c; 
     } 

    } 
    public static class Obj1 extends Base{ 
     public static String set[] = {"a","b","C"}; 
     public static double coef[]= {1,2,3}; 
     public Obj1(){ 
      super(set, coef); 
     } 

    } 
    public static class Obj2 extends Base{ 
     public static String set[] = {"x","y","z"}; 
     public static double coef[]= {11,12,13}; 
     public Obj2(){ 
      super(set, coef); 
     } 


    } 

} 

然後我打電話給他們用

Myclass class1 = new MyClass((TopClass.Base)(new TopClass.Obj1()); 
Myclass class2 = new MyClass((TopClass.Base)(new TopClass.Obj2()); 

但這WASN不是我真正想要的東西,因爲班級變得很麻煩,尤其是我會創建許多這樣的條目。 任何見解將不勝感激:)

感謝,

哈尼族

+1

爲什麼會員是靜態的? – 2012-03-06 04:13:42

+0

,因爲它們被傳遞給基類的構造函數 – hini 2012-03-06 04:31:44

+0

是成員最後的? – 2012-03-06 05:02:00

回答

0

這將是一個使用工廠模式的好地方。也許是這樣的:

public class SetCoefProvider { 
    private String[] set; 
    private double[] coef; 

    public SetCoefProvider(String[] set, double[] coef) { 
    this.set = set; 
    this.coef = coef; 
    } 

    public String[] getSet() { 
    return set; 
    } 
    public double[] getCoef() { 
    return coef; 
    } 
} 

public class SetCoefProviderFactory { 
    public static SetCoefProvider createObj1Provider() { 
    return new SetCoefProvider(new String[] {"a", "b", "c"}, new double[] {1,2,3}); 
    } 
    public static SetCoefProvider createObj2Provider() { 
    return new SetCoefProvider(new String[] {"x", "y", "z"}, new double[] {11,12,13}); 
    } 
} 

,然後,如果你真的想他們是單身,你總是可以這樣做:

public class SingletonSetCoefProviders { 
    private static SetCoefProvider obj1Provider, obj2Provider; 

    static { 
    obj1Provider = SetCoefProviderFactory.createObj1Provider(); 
    obj2Provider = SetCoefProviderFactory.createObj2Provider(); 
    } 

    public static SetCoefProvider getObj1Provider() { 
    return obj1Provider; 
    } 
    public static SetCoefProvider getObj2Provider() { 
    return obj2Provider; 
    } 
} 
0

我將封裝Object1和對象2時,爲什麼以確保它們可用於使用和訪問,至少他們不爲null。見下:

public static TopClass(){ 
    private static Object obj01 = null; 
    private static Object obj02 = null; 

    public Object getObj01(){ 
     if(obj01 == null){ 
      obj01 = new Object(); 
     } 

     return (obj01); 
    } 

    public Object getObj02(){ 
     if(obj02 == null){ 
      obj02 = new Object(); 
     } 

     return (obj02); 
    } 
} 

或在你的情況下,對象是在數組tipe [] ,.

0

我將創建許多條目。任何有識之士將不勝感激:)

的想法是,與靜,你不希望使許多人,這是一個靜態的東西整點。重新思考和/或重新提出更多關於你的目標的背景,你打算完成的目標並不明確。

+0

我可以創建一個包含所有這些靜態值的類並簡單地使用 MyClass class1 = new MyClass(TopClass.ClassA_StaticSet1,TopClass.ClassA_StaticCoef1); 但我想知道是否有更優雅的方式去做它 – hini 2012-03-06 04:37:17

+0

看起來很麻煩,因爲你的靜態內部類是靜態的,它們不應該是。不知道更多(我不想知道更多),我會說他們應該升級到實例類。 – Pedantic 2012-03-06 04:40:08

0

我沒有得到靜態部分。爲什麼不這樣做:

import java.util.*; 
interface Foo { 
    String[] set(); 
    double[] coef(); 
} 
class FooImpl1 implements Foo { 
    @Override public String[] set() { 
     return set; 
    } 
    @Override public double[] coef() { 
     return coef; 
    } 
    String set[]={"a","b","C"}; 
    double coef[]={1,2,3}; 
} 
class FooImpl2 implements Foo { 
    @Override public String[] set() { 
     return set; 
    } 
    @Override public double[] coef() { 
     return coef; 
    } 
    String set[] = {"x","y","z"}; 
    double coef[]= {11,12,13}; 
} 
interface Bar { 
    Foo foo1=new FooImpl1(); 
    Foo foo2=new FooImpl2(); 
} 
public class So9577640 { 
    public static void main(String[] args) { 
     Foo foo1=new FooImpl1(); 
     System.out.println(Arrays.asList(foo1.set())); 
     Foo foo2=new FooImpl2(); 
     System.out.println(Arrays.asList(foo2.set())); 
     System.out.println(Arrays.asList(Bar.foo1.set())); 
     System.out.println(Arrays.asList(Bar.foo2.set())); 
    } 
}