2

これら 2 つのクラスでは、メイン メソッドから TestClass の getName メソッドで TestClassTwo のオブジェクトを渡しました。オブジェクト obj を使用して getTwoName メソッドを呼び出したいと思います。誰かがそれを手伝ってくれませんか。ありがとう // 以下はコードです // class1

package Test;

public class TestClassTwo {

    public static String getTwoName()
    {
        return "2nd";
    }

}

// クラス 2

パッケージテスト;

パブリック クラス TestClass {

public void getName(Object obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException
{
    //  call getTwoName method of TestClassTwo using obj object
}
public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException
{
    TestClass tc=new TestClass();
    tc.getName(new TestClassTwo());
}

}

4

3 に答える 3

2

Object(スーパークラス) をTestClassTwo(サブクラス) にキャストします。

String name = ((TestClassTwo) obj).getTwoName();

また:

TestClassTwo temp = (TestClassTwo) obj
String name = temp.getTwoName();

インスタンスを使用して静的メソッドを呼び出すことは役に立たないことに注意してください。代わりに、クラス名を使用して静的メソッドを呼び出します。

String name = TestClassTwo.getTwoName();
于 2012-04-06T06:57:19.627 に答える
0

なんで?メソッドは静的であるため、オブジェクトを使用する必要はありません。オブジェクトを使用してこのメ​​ソッドを呼び出すことは無駄です。ただ書いてTestClassTwo.getTwoName()ください。

[あなたの質問には何か問題があると強く思います。]

そのクラスのオブジェクトを介して未知のクラスの静的メソッドに本当にアクセスする必要がある場合は、次のようにします。

String twoName = obj.getClass().getMethod("getTwoName").invoke(null);
于 2012-04-06T06:59:34.720 に答える
0

他の人が言ったように、メソッドに静的にアクセスする場合は、インスタンスは必要ないため、パラメーターはまったく必要ありませんTestClass#getName。ただし、それをインスタンス メソッドにしたい場合は、次の 3 つのいずれかを行うことができます。

1) タイプ TestClassTwo in を取り込む TestClass#getName:

public class TestClass {
    public void getName(TestClassTwo obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        String name = obj.getTwoName();
        // Do something with 'name'
    }
    public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        TestClass tc=new TestClass();
        tc.getName(new TestClassTwo());
    }
}

2) オブジェクトを のインスタンスにキャストし TestClassTwo、型を確認します。

public class TestClass {
    public void getName(Object obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        if (obj instanceof TestClassTwo) {
            TestClassTwo two = (TestClassTwo) obj;
            String name = two.getTwoName();
            // Do something with 'name'
        } else {
            // Handle failure accordingly (throw an exception, log an error, do nothing, etc.)
        }
    }
    public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        TestClass tc=new TestClass();
        tc.getName(new TestClassTwo());
    }
}

3) 他のクラスに関数を持たせたい場合は getTwoName() 、インターフェイスを定義し、そのインターフェイスのインスタンスをパラメーターとして次のように受け取ります TestClass#getName

public interface HasTwoName {
    public String getTwoName();
}

public class TestClassTwo implements HasTwoName {
    @Override
    public String getTwoName() {
        return "2nd";
    }
}

public class TestClass {
    public void getName(HasTwoName obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        String name = two.getTwoName();
        // Do something with 'name'
    }
    public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        TestClass tc=new TestClass();
        tc.getName(new TestClassTwo());
    }
}
于 2012-04-06T07:00:40.500 に答える