• 締切済み

「Class<?>」てなんですか???

あるサンプルソースで、 public Class<?> getColumnClass (int column) {return getValueAt (0, column) .getClass () ;} } ; というクラスがでてきました。 Classの後の「<?>」が何なのか気になります。 あっても無くてもプログラムの実行には問題ないようなのですが、 これは、一体何のためにあるのでしょうか? ご存知の方教えてください。

みんなの回答

  • hatimiti
  • ベストアンサー率68% (26/38)
回答No.1

これはジェネリクスの機能の1つです。 通常、ジェネリクスは型を限定するのですが、 実行するまで型が分からない場合などに「?」を指定します。 何でもありという意味では、<Object> と似ていますが、以下の例などで変わってきます。 List<?> x = new ArrayList<Object>(); x.add(1); // コンパイルエラー List<Object> y = new ArrayList<Object>(); y.add(1); インスタンスはどちらも ArrayList<Object> だが、<?>の場合は add 時にコンパイルエラーとなります。 参考URL: http://www.ne.jp/asahi/hishidama/home/tech/java/generics.html#h_diff_CextendsC

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • class Test_A {  main(){}}の実行順序は?

    public class Test_A { public static void main(){ int a = 0; int b = 1; } } 例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

    • ベストアンサー
    • Java
  • 配列クラスのクラス名

    配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • enumをintとして扱う必要があるパターンはあるのでしょうか。

    enumをintとして扱う必要があるパターンはあるのでしょうか。 よく enum ENUM_SAMPLE {  A,  B,  C, }; class CLASS_SAMPLE { private:  int type; // ENUM_SAMPLEのA,B,Cしか入らない public:  int GetType(){ return type; } }; という記述を良く見かけます。 class CLASS_SAMPLE { private:  ENUM_SAMPLE type; // ENUM_SAMPLEのA,B,Cしか入らない public:  ENUM_SAMPLE GetType(){ return type; } }; のほうが良いのではないか思うのですが、intで定義することによる利点が何かあるのでしょうか。 あと、過去に // bcc利用時に問題があるのでintに変更しました int CLASS_SAMPLE::GetType {  return type; } というコメントがついたソースを見たことがあり、 自分でbccを使ってenumを返すように修正してテストしてみたことがあるのですが、何が問題なのか見つけることが出来ませんでした。 enum名を直接使用した場合に問題が発生することがあるのか、またどのような問題が発生することがあるのか、回答お願いします。

  • classを使って座標軸を求めるコード

    やさしいJavaからの問題です。 次のように、整数値の座標をあらわす MyPoint クラスを作成してください。 フィールド private int x; (X座標) private int y; (Y座標) メソッド public void setX(int px); (X座標を設定する) public void setY(int py); (Y座標を設定する) public int getX(); (X座標を得る) public int setY(); (Y座標を得る) という問題で、回答は以下の通りですが、 class MyPoint { int x; int y; void setX(int px) { x = px; } void setY(int py) { y = py; } int getX() { return x; } int getY() { return y; } } class Sample5 { public static void main(String[] args) { MyPoint p1; p1 = new MyPoint(); p1.setX(10); p1.setY(5); int px = p1.getX(); int py = p1.getY(); System.out.println("p1のX座標は" + px + "Y座標は" + py + "でした。"); } } 教科書の関連の章ではreturnが先に来ているのですが、突然この問題ではvoidから始まっているのですが、int getX()~return y;までとvoid setX~y = py;までの部分 の順番を変えてもいいですか?

    • ベストアンサー
    • Java
  • C++ proxy class の質問

    C++の学習者です。Visual Studio Community 2015の上で、教本を使って勉強しています。 その中でproxy class のサンプルコードがあり、忠実にキーボードから入力してビルドしようとしたのですが、添付画面写真のようなエラーメッセージが出て、出来ませんでした。 ちゃんとクラスの定義ファイルもありますので、「識別子がクラス名でも名前空間名でもありません。」などというメッセージがどうして出るのかわかりません。 詳しい方がいらっしゃいましたら、どうぞ教えて頂きたく、お願いいたします。 プロジェクトに含まれるソースファイルやヘッダーファイルなどを下にコピーしてあります。 (1) メインプロジェクトファイル : // ConsoleApplication84.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // example of proxy class #include "stdafx.h" #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> #include <cmath> #include <cstring> #include <new> using namespace std; #include "interface.h" int main() { Interface i(5); cout << "interface contains : " << i.getValue() << " before setValue()" << endl; i.setValue(10); cout << "interface contains : " << i.getValue() << " after setValue()" << endl; return 0; } (2) Implementation クラスのヘッダー... クライアントから隠しておきたいクラス #pragma once // header file for class Implementation // example of proxy class class Implementation { public: // constructor Implementation(int v) : value(v) // initialization syntax { // empty body } // set value to v void setValue(int v) { value = v; } // return value int getValue() const { return value; } private: int value; };// end class definition (3) Interface クラスのヘッダー ... Implementation の proxy class #pragma once // header file for Interface class class Implementation; // forward class declaration // use this format when a pointer or reference to // class Implementation is used // do not write as " #include "inplementation.h" " class Interface { // this is the proxy class of Implementation class public: Interface(int); void setValue(int); int getValue() const; ~Interface(); private: Implementation *ptr; // use a pointer to an object in Implementation class }; 【4】Interface クラスの関数定義 // interface.cpp // definition of member function for Interface class #include "interface.h" #include "implementation.h" #include "stdafx.h" // constructor Interface::Interface(int v) : ptr (new Implementation(v)) // initialize pointer { // empty body } // set value function void Interface::setValue(int v) { ptr->setValue(v); // do not take the form of assigning the value to the private pointer ptr // but use the public function of setValue() of Implementation class through pointer ptr // this way the client(or main() program ) of class Implementation does not access to // the actual inside code of the class definition } // return value int Interface::getValue() const { return ptr->getValue(); } // destructor Interface::~Interface() { delete ptr; }

  • public class Power {

    public class Power { static long pow(int a, int b){ if (b<=0) return 1; else return a*pow(a,b-1); } public static void main(String args[]){ System.out.println(pow(1,3)); } } run: 1 BUILD SUCCESSFUL (total time: 0 seconds) 簡単な問題ですが。。。 僕の予想では答えは2でした 1 * (1, 2) 1 * 1 * 2 じゃないんですか?

    • ベストアンサー
    • Java
  • JTable ArrayList 表示されない

    度々質問させて頂いてます。 Jtableでファイルのリストを表示させたいのですが、アプリ外(Windowsのエクスプローラ)からのD&Dしてきたファイルを、最初に要素のない状態で定義したArrayList型の変数?にいれる(addする)ので、はじめはArrayList型変数には知らない(意味を持たない)値が入っているか、JTableが、表示する範囲の要素がなくて困ってしまっているはずです。たぶんそのせいでJTableに表示されないんだと思います。(妄想です) nullで初期化しようとも考えたのですがそうするとaddが使えなくなってしまい(nullが入っているところの後ろからaddされる)、同じ班の人が作ってくれたクラスを手直し?しなくてはなりません。 どうすればいいでしょう。 ちょっと日本語がイカれてますができれば助けて欲しいです。 補足ならいくらでもします。 //TableModelクラス public class TableModel extends AbstractTableModel{ public static DataList mainList = new DataList(); TableModel(){ } @Override public int getColumnCount() { return 4; } @Override public int getRowCount() { return 1; } @Override public String getValueAt(int row, int column) { String fileName = mainList.GetData(row).GetName(); String lastModifiedDate = mainList.GetData(row).GetDate().toString(); String filePath = mainList.GetData(row).GetPath(); switch(column){ case 0: return null; case 1: return fileName; case 2: return lastModifiedDate; case 3: return filePath; default: return null; } } public String getColumnName(int column){ switch(column){ case 0: return null; case 1: return "ファイル名"; case 2: return "更新日時"; case 3: return "パス"; default: return null; } } } //DataListクラス public class DataList{ List<FileData> dataList; public DataList(){ this.dataList = new ArrayList<FileData>(); } // 末尾にデータを追加 public void AddData(FileData fd){ this.dataList.add(fd); } } FileDataクラスは単純にファイル名、パス、更新日時(Date型)を持つクラスです rowが1なのはいろいろ試したからで、実際は30行くらい表示していたいです。

    • ベストアンサー
    • Java
  • 別ファイルのclassの読み込みについて

    Javaを勉強し始めたばかりのものです。 購入した参考書を見ながら勉強していますが、表題の件の項目で参考書ではうまくいくように表記されておりますが、実際にやってみると下記エラーが表示されます。 --------------------------------------------- C:\XXXXXXXXXX>javac ../../sample/Sample1.java ..\..\sample\Sample1.java:3: シンボルを見つけられません。 シンボル: クラス Car 場所 : Sample1 の クラス Car car1 = new Car(); ^ ..\..\sample\Sample1.java:3: シンボルを見つけられません。 シンボル: クラス Car 場所 : Sample1 の クラス Car car1 = new Car(); ^ エラー 2 個 ------------------------------------------------------ ちなみに下記はソースとなります。 -------------------------------------------- 【Car.java】 //Carクラス class Car { private int num; private double gas; public Car(){ num = 0; gas = 0.0; System.out.println("車を作成しました。"); } public void setCar(int n, double g){ num = n; gas = g; System.out.println("ナンバーを" + num + "ガソリン量を" + gas + "にしました。"); } public void show(){ System.out.println("車のナンバーは" + num + "です。"); System.out.println("ガソリン量は" + gas + "です。"); } } 【Sample1.java】 class Sample1 { public static void main (String args[]){ Car car1 = new Car(); car1.show(); } } --------------------------------------------------- なんとなくエラーが出るだろうとはわかりますが、上記の記載方法だとやはりうまくいかないのでしょうか? お忙しいところ申し訳ありませんが、どなたかご教示の程お願いいたします。

    • ベストアンサー
    • Java
  • Classファイル → Javaソースプログラム

    どーも、こんにちは。プログラミング初心者です。 現在Javaを使ってプログラムをしています。 JavaはJavaソースをコンパイルするとClassファイルが生成されるじゃないですか? では逆に、ClassファイルからもとのJavaソースプログラムに変換する(?)、取り戻すことはできないのでしょうか??? もしかして無理なのかもしれませんが、これが出来ないとどうしていいか分かりません。 どうしても、ソースプログラムが見たいClassファイルがあるのです。 そんな状態なので困っています。 どなたか少しでもご存知の方は、ご一報ヨロシクお願いします!!

    • ベストアンサー
    • Java
  • クラスについて~根本的なことなんですが

    プログラムの経験はCOBOL程度で、 先月からJAVAの勉強を始めました。 プログラムを作成する上での機能や定義や、 サンプルプログラムの流れや処理内容を理解することは 出来てきたのですが、 実習問題で ・CheckDataクラスのCheckNumber()メソッドは、引数に渡された数値の 正負を判定し、正の場合trueを返します。 ・以下の実行結果になるようにプログラムを作成してください。 <実行例> -1 is a negative number. 2 is a positive number. -50 is a negative number. 100 is a positive number. <CheckData.java> public class CheckData { public boolean checkNumber(int data) { if (data >= 0) { return true; } else { return false; } } } <UsePackage.java> class UsePackage { public stativ void main(String args[]){ int num[] = {-1, 2, -50, 100}; } } <条件> ・確認する数値は、UsePackageクラスに定義されたnum配列の整数を使用する。 ・CheckDataクラスはhoge.pkglabsにパッケージする という問題が出たときに、 どちらのクラスに System.out.println(正負の表示); 等の処理を入れればいいのか、 どの処理は何処のクラスに入れればいいのか等が ちんぷんかんぷんです。 新たなクラスをファイルを作るべきなのかも分からなく、 実際上の問題で新たなクラスファイルを作ろうとしてました。 実際一から作る時が来るかと思いますが、その時を考えると 焦ってしまいます。 私がオブジェクト指向の考え方を分かったつもりで、 実は正しく理解出来ていないのかもしれません。 Javaを習い始めた時に同じ問題にぶつかった方、 乗り越えた方がいらっしゃいましたら、 是非その勉強法(?)、クラスやプログラムの組み方を教えていただきたいのです。 宜しくお願いします。

    • ベストアンサー
    • Java
このQ&Aのポイント
  • パソコンと無線LANアクセスポイントで接続したが、プリンターのディスプレーにパスワード変更が必要とのメッセージが表示される。
  • パスワードの変更方法がわからず困っている。
  • 質問はブラザー製品に関するもの。
回答を見る