0

条件を確認する必要があり、満たされている場合はクラスを返す必要があり、満たされていない場合は別のクラスを返す必要があります

private <T> d(String example) {

        if(example.startsWith("example1"))
            return new example1();
        else if((example.startsWith("example2"))
            return new example2();

    }

返品方法がわかりませんので、説明してください。

4

3 に答える 3

2

返すことができる両方のオブジェクトのスーパー クラスまたはインターフェイスを返す必要があります。それらのスーパークラスを定義していない場合でも、返されたクラスを知るために戻っObjectてあまり良くないinstanceof検証を行うことができます。

コード例:

class SuperClass {
}

class MyClass1 extends SuperClass {
}

class MyClass2 extends SuperClass {
}

private SuperClass myMethod(String parameter) {
    SuperClass sc = null;
    //just trying some code, this could be replaced for your logic
    if (parameter.equals("1")) {
        sc = new MyClass1();
    } else {
        sc = new MyClass2();
    }
    return sc;
}

private void myOtherMethod(String parameter) {
    //some code here...
    SuperClass sc = myMethod(parameter);
    if (sc != null) {
        //securing the upcast...
        if (sc instanceof MyClass1) {
            //logic of MyClass1 instance...
        }
        if (sc instanceof MyClass2) {
            //logic of MyClass2 instance...
        }
    }
    //more logic over here...
}
于 2012-06-28T05:13:04.803 に答える
1

この場合、両方のクラスのスーパークラスまたはインターフェースは同じでなければならず、関数からそのスーパークラス参照を返します。

例えば ​​-

class SuperClass {
// Variables

// Functions
}

class example1 extends SuperClass{

// Variables

// Functions

}

class example2 extends SuperClass{

// Variables

// Functions

}


private SuperClass d(String example) {

        if(example.startsWith("example1"))
            return new example1();
        else if((example.startsWith("example2"))
            return new example2();

}
于 2012-06-28T05:14:17.443 に答える
0
private Object getObject(String example) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
    if (example.startsWith("example1"))
        return Class.forName("example1ClassName").newInstance();
    if (example.startsWith("example2")) {
        return Class.forName("example2ClassName").newInstance();
    }
    return null;
}

しかし、お気づきのように、このメソッドは多くの例外をスローするので注意してください。クラスには、パブリックのデフォルト コンストラクターがないか、クラスパスの問題がある可能性があります。機密性が高く、戻り値を操作するにはキャスト操作が必要です。利点は、継承/スーパークラスの問題がなく、任意のクラスを使用してインスタンス化できることです。

于 2012-06-28T05:25:49.810 に答える