2012-03-06 5 views
1

내가 그래서 하나 개의 클래스에서 모든 정적 값을 수집하고자바 클래스는

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

같은 것을 사용하여 전화를 원

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

를 사용하여 특정 클래스를 생성하고 값 여기서 Obj1과 Obj2는 위에서 언급 한 값 쌍을 포함하는 정적 엔티티입니다. 내가 TopClass 내부 정적 클래스를 만드는 하나 개의 기본 클래스 을 확장했다 할 수

가장 가까운 것은 그래서 내가

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

그러나이 얻지 못한 그들을 호출

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


    } 

} 

다음이 추한 구현을 얻었다 수업이 성가신 것이기 때문에 제가 정확히 원했던 것은 아닙니다. 특히 내가이 항목들을 많이 만들 것입니다. 어떤 통찰력이 많이 주시면 감사하겠습니다 :)

덕분에,

을하니

i는 오브젝트 1 및 object2를 캡슐화 것
+1

회원은 왜 정적입니까? –

+0

은 기본 클래스의 생성자로 전달되기 때문에 – hini

+0

은 최종 회원입니까? –

답변

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

는 왜 그들이 적어도 액세스를 사용 할 수 있는지 확인하는 것입니다 그들은 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

+0

정적 인 내부 클래스가 정적이기 때문에 매우 복잡해 보입니다. 더 많이 알지 못하면 (그리고 나는 더 많이 알기를 원하지 않습니다.) 저는 그들이 인스턴스 클래스로 승격되어야한다고 말하고 싶습니다. – Pedantic

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