2017-07-14 5 views
-5

このメソッドのコンパイルについては、Tは一般的です。 javacコンパイラ(Java 1.8)でこれをコンパイルする方法はありますか?これらの行をJavaでコンパイルすることは可能ですか?

public class MyGenericClass<T>{ 
    public void someGenericAction(T value){ 
     int key = (int) value; 
    } 
} 

ドイツからよろこび!

+3

を行うことができます。 –

+1

あなたの努力を教えてください、私たちはあなたを助けることができます – sForSujit

+0

java:互換性のないタイプ:Tはintに変換できません。それはちょうどそれが何らかの形で(コンパイラを構成する...)可能性がある場合についてです。 –

答えて

0

あなたは少なくとも、あなたが得るエラーについての情報を追加し、この

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); 
     } 
} 
+0

これはどのようにOPに役立つのですか? – EJoshuaS

+0

彼は "int"を "Integer"に変更するだけです – divine

+0

回答ありがとうございます。私もこれを試して、それは動作します。しかし、何らかの理由で、私は私の質問に記載された行をコンパイルする "タスク"を持っています。エラーを出さずにコンパイルするだけです。おそらくそれは可能ではありませんが、私はそれについては分かりませんでした。 –

0

あなたは本質的に汚いハックを求めています。はどのようにしてintに耐えられるのでしょうか?

はのはTは、合理的なtoStringメソッドを持っていることを期待しましょう、とすることを悪用します。JavaのすべてのオブジェクトがtoString()メソッドを持っているので

int key = Integer.parseInt(value.toString()); 

これは、少なくともコンパイルします。しかし、実行時にスローされる可能性がある無数の例外を処理するのはあなたの仕事です。他のプリミティブ型と特定の型のTのオーバーロードを関数に追加すると、toString()メソッドを使用するよりも賢明なことができます。

+0

回答ありがとうございますが、私のコード行をコンパイルすることは可能ですか? F.e.いくつかのコンパイラ設定やそのようなものを変更しますか? –

+0

@MarvinKrüger:希望。私は本当にあなたのデザインを考え直す必要があると思う - 質問のコメントを参照してください。ここで私が与えるアプローチは「臭い」です。 – Bathsheba

+0

私はちょうどその方法でコンパイルすることが一般的に可能かどうかを知りたがっています... 私は絶対にベストプラクティスではありませんが、それは重要ではありません:) –

2

私は確かに希望これはJavaでは不可能です。任意のタイプがintに「直接」安全に型キャストできる保証はありません。これはまさにあなたのメソッドが必要としているものです。実際には、大多数のタイプの場合、ではありません。

何か(int)"abc"でもは平均ですか? (それはあなたが提供するメソッドでは技術的に可能です。​​はあなたのメソッドにとって完全に有効な入力です)。そのキャストは明らかにナンセンスであり、Javaはそれを許すべきではありません。あなたは、このキャストが明らかなナンセンスであるこのようなケースのトンを考え出すことができます。

技術的に問題がある場合は、微妙なバグにつながる可能性もあります。たとえば、(int)11.2は丸め(結果は11になります)、結果としてデータが失われます。

TL; DRはありません、それは不可能です、あなたはあなたが根本的に意味がない何かをしようとしているので、それはどちらかの可能であることをを望んでいません。

関連する問題