[解決済み] (汎用)非静的型Tへの静的参照はできない
質問
Demoクラスを実行すると、SomeClassのスタティックメソッドnewInstanceが呼び出され、コンストラクタとhelloの印刷が行われます。
メソッドを定義するには、戻り値の型とメソッド名、引数を指定します。
newInstanceの戻り値が <T>SomeClass<T> というのは、どうも変な気がします。 私のクラスは <T>SomeClass<T> ではなく SomeClass<T> と呼ばれているからです。
SomeClass<T> の前に <T> が必要な理由は何ですか? これを入れないと、よくあるエラーになるようです。 Cannot make a static reference to the non-static type T と呼ばれる。
もうひとつ、<T> と SomeClass<T> の間には多くのスペースを入れることができるので、一緒にする必要はなさそうです。
public class SomeClass<T> {
public static <T>SomeClass<T> newInstance(Class<T> clazz){
return new SomeClass<T>(clazz);
}
private SomeClass(Class<T> clazz){
System.out.println("hello");
}
}
public class Demo {
public static void main(String args[])
{
SomeClass<String> instance = SomeClass.newInstance(String.class);
}
}
解決方法は?
スタティックメソッドとは何ですか?特定のインスタンスではなく、クラスに対して動作するメソッドです。ジェネリックパラメータである
T
をクラスのシグネチャに追加します。
public class SomeClass<T>
は特定のインスタンスに対してのみ有効です(そのため
non-static type T
). 例.
SomeClass<String>
ここで
[T = String]
.
を含めることで
<T>
のメソッドシグネチャで
public static <T>SomeClass<T> newInstance(Class<T> clazz)
. つまり、このメソッドには汎用型の引数である
T
. この
T
とは別のものです。
T
をクラスのシグネチャに追加します。ですから
C
すなわち
public static <C> SomeClass<C> newInstance(Class<C> clazz)
. または全く別のもの。
しかし、もしあなたが
<T>
を使おうとしているとコンパイラは判断します。
T
をクラスのシグネチャに追加します。これは違法です。
関連
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み] 汎用クラスやメソッドのメンバからTの型を取得する方法
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
-
[解決済み] なぜJava 8のOptionalは引数で使ってはいけないのか
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】破損したjarファイル
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み】Javaの未処理例外について
-
[解決済み】予期しない型エラー