C++のバックグラウンドから来て、オブジェクトの作成を経ることなく、アプリケーション全体で使用できる静的な静的メソッドをほとんど作成しないことを望んでいました。そして、私はJava Genericsで関数テンプレートの等価性を使用したいと考えていました。この時点で、私はJavaジェネリックスを学んでいることを明確にしたいと思います。Java Generics - 型引数を持つ静的メソッドの作成方法
しかし、これを試してみると、私はコンパイラが私にそうすることを許していないことが分かりました。そして私はvery good discussion as well hereを見ることができました。しかし、その後、私は周りの静的なクラスと同様のタッチで書くように警告メッセージを出して遊んだ。私の直感によれば、それはそこで働いた。明らかに、私が下に示した内部クラスにアクセスするのは不思議です。私はなぜこれがJavaでこのように設計されたのだろうと思っています。この内部クラスは外部クラスにジェネリックを提供します。
public class ReflectionBasics<X, Y> {
public static void findMax (X xData, Y yData){
// compiler error - cannot reference static type to non-static type X
}
public void findMin(X xData, Y yData){
// this is fine
}
static final class InnerClass<E> {
public void findMin(E data){
// this will work
}
}
}
不器用なアクセサ:
class AccessorClass{
AccessorClass(){
ReflectionBasics.InnerClass<Integer> myData = new ReflectionBasics.InnerClass<Integer>();
myData.findMin(400);
}
}
https://docs.oracle.com/javase/tutorial/java/generics/methods.html Javaには一般的なメソッドがあります。また、Javaジェネリックスはテンプレートではなく、C++テンプレートが実行できる多くのことを行うことができないことにも注意してください。 (一方で、C++のテンプレートではできないいくつかのことができます) – Radiodef