The title is pretty self-explanatory.
Will the raw type of, for example, ArrayList
act the same as ArrayList<Object>
?
I need to select information form a database based on criteria that crosses multiple tables
I have a problem where I need to select the Project Number, Controlling Department Number, Department Manager's Lname, address, and birthdate for each project located in Stafford. I am having trouble getting the results I want.
I tried:
SELECT PROJECT.PNUMBER, PROJECT.DNUM, EMPLOYEE.LNAME, EMPLOYEE.ADDRESS, EMPLOYEE.BDATE
FROM PROJECT, EMPLOYEE, DEPARTMENT
WHERE PLOCATION = 'STAFFORD' AND DEPARTMENT.MGRSSN = EMPLOYEE.SSN;
And Got:
+---------+------+---------+-------------------------+-----------+ | PNUMBER | DNUM | LNAME | ADDRESS | BDATE | | 30 | 4 | WONG | 683 VOSS, HOUSTON, TX | 08-DEC-55 | | 10 | 4 | WONG | 683 VOSS, HOUSTON, TX | 08-DEC-55 | | 30 | 4 | WALLACE | 291 BERRY, BELLAIRE, TX | 20-JUN-41 | +---------+------+---------+-------------------------+-----------+
But what I should have gotten is (or what I wanted):
+---------+------+---------+-------------------------+-----------+ | PNUMBER | DNUM | LNAME | ADDRESS | BDATE | | 10 | 4 | WALLACE | 391 BERRY, BELLAIRE, TX | 20-JUN-41 | | 30 | 4 | WALLACE | 291 BERRY, BELLAIRE, TX | 20-JUN-41 | +---------+------+---------+-------------------------+-----------+
Can anyone help me figure out what is wrong with my sql statement? sorry I wasn't able to figure out how to format this
2 に答える
そうではありません。を見てみましょう
MyClass myClass1 = new MyClass<Integer>();
//MyClass<Object> myClass2 = new MyClass<Integer>();//compilation error
MyClass<?> myClass3 = new MyClass<Integer>();//this time it compiles
myClass1.setter(1);
//myClass3.setter(1);//compilation error
のホルダーへの参照を宣言しているが、ホルダーのホルダーを渡してmyClass2
いるため、コンパイルされない場合、ジェネリックは共変ではありませんObjects
Integers
また、場合のようにワイルドカードに変更<Object>
すると、そのセッターを任意のオブジェクト (null 以外) で使用できなくなります。これは、任意のタイプのオブジェクトを保持できる参照になる可能性があり、ホルダーへの受け渡しは安全ではないためです。 .<?>
myClass3
myClass3.someSetter(1)
MyClass<?>
MyClass<Anything>
1
Strings
メソッド シグネチャに関しては、 erasedE
はその boundObject
であるため、 rawArrayList
には次のようなメンバー メソッドがあると言っても問題ありません。ArrayList<Object>
サブタイプに関しては、生の型はワイルドカード型に似ています。for anyArrayList
のスーパータイプです。一方、コンパイラ エラーや警告を発生させることなくraw に変換できます。ArrayList<x>
x
ArrayList<x>
ArrayList
これはすべて下位互換性のためです。これらの役に立たない情報を知る必要がないように、生の型はとにかく避けるべきです。