このメソッドのコンパイルについては、Tは一般的です。 javacコンパイラ(Java 1.8)でこれをコンパイルする方法はありますか?これらの行をJavaでコンパイルすることは可能ですか?
public class MyGenericClass<T>{
public void someGenericAction(T value){
int key = (int) value;
}
}
ドイツからよろこび!
このメソッドのコンパイルについては、Tは一般的です。 javacコンパイラ(Java 1.8)でこれをコンパイルする方法はありますか?これらの行をJavaでコンパイルすることは可能ですか?
public class MyGenericClass<T>{
public void someGenericAction(T value){
int key = (int) value;
}
}
ドイツからよろこび!
あなたは少なくとも、あなたが得るエラーについての情報を追加し、この
class MyGenericClass<T>{
public static <T>void someGenericAction(T value){
int key = (Integer)value; // here is your's
System.out.println(key);
}
public static void main(String[] args){
someGenericAction(12);
}
}
あなたは本質的に汚いハックを求めています。はどのようにしてint
に耐えられるのでしょうか?
はのはT
は、合理的なtoString
メソッドを持っていることを期待しましょう、とすることを悪用します。JavaのすべてのオブジェクトがtoString()
メソッドを持っているので
int key = Integer.parseInt(value.toString());
これは、少なくともコンパイルします。しかし、実行時にスローされる可能性がある無数の例外を処理するのはあなたの仕事です。他のプリミティブ型と特定の型のT
のオーバーロードを関数に追加すると、toString()
メソッドを使用するよりも賢明なことができます。
回答ありがとうございますが、私のコード行をコンパイルすることは可能ですか? F.e.いくつかのコンパイラ設定やそのようなものを変更しますか? –
@MarvinKrüger:希望。私は本当にあなたのデザインを考え直す必要があると思う - 質問のコメントを参照してください。ここで私が与えるアプローチは「臭い」です。 – Bathsheba
私はちょうどその方法でコンパイルすることが一般的に可能かどうかを知りたがっています... 私は絶対にベストプラクティスではありませんが、それは重要ではありません:) –
私は確かに希望これはJavaでは不可能です。任意のタイプがint
に「直接」安全に型キャストできる保証はありません。これはまさにあなたのメソッドが必要としているものです。実際には、大多数のタイプの場合、はではありません。
何か(int)"abc"
でもは平均ですか? (それはあなたが提供するメソッドでは技術的に可能です。はあなたのメソッドにとって完全に有効な入力です)。そのキャストは明らかにナンセンスであり、Javaはそれを許すべきではありません。あなたは、このキャストが明らかなナンセンスであるこのようなケースのトンを考え出すことができます。
技術的に問題がある場合は、微妙なバグにつながる可能性もあります。たとえば、(int)11.2
は丸め(結果は11
になります)、結果としてデータが失われます。
TL; DRはありません、それは不可能です、あなたはあなたが根本的に意味がない何かをしようとしているので、それはどちらかの可能であることをを望んでいません。
を行うことができます。 –
あなたの努力を教えてください、私たちはあなたを助けることができます – sForSujit
java:互換性のないタイプ:Tはintに変換できません。それはちょうどそれが何らかの形で(コンパイラを構成する...)可能性がある場合についてです。 –