私はJavaとジェネリックのトピックを学習しています。ワイルドカードの概念を理解するために、私は次のコードを使いこなしています。私はジェネリッククラスを取り、それを別のジェネリッククラスの型の名前と比較するメソッドを作成しようとしています。名前が解決できないと私に伝えています。クラスインスタンス変数にアクセスできるジェネリックを作成する方法、また自分自身のインスタンス変数を作成する方法次のコードで何が問題になりますか?ワイルドカードとして使用するオブジェクトの変数を取得する方法
package wildcardExample;
class tape{
String name;
int ItemNum;
}
class paper{
String name;
int itemNum;
}
class cds{
String name;
int itemNum;
}
class files<T>{
T myobject;
files(T inobject){
myobject = inobject;
}
T returnname(){
return myobject;
}
static void compareName(files<?> infiles){
if(this.name == infiles.name){
System.out.println("name is the same" + this.name);
}
}
}
public class myWildcard {
public static void main(String args[]){
tape MyTape = new tape();
MyTape.name = "hello world";
paper MyPaper = new paper();
MyPaper.name = "hello world";
files<tape> MyFiles1 = new files<tape>(MyTape);
files<paper> MyFiles2 = new files<paper>(MyPaper);
MyFiles1.compareName(MyFiles2);
}
}
やりたいように見える、あなたの 'files'をクラスは' name'のインスタンス変数を定義していません。 'this.name'も' infiles.name'も意味をなさない。 – user2357112
「クラスインスタンス変数にアクセスできるジェネリックを作成する方法と、自己のインスタンス変数を作成する方法」できません。ジェネリックスは、消去された型のメンバ変数へのアクセス権しか与えません。この場合、 'Object'にはパブリックフィールドがありません。 –
ファイル内に名前インスタンス変数を宣言するにはどうすればよいですか?このコードを修正するにはどうすればよいですか? –