2016-04-13 8 views
2
public static <U> Predicate<U> isEqualsTo(U u) { 
    return s -> s.equals(u); 
    /*Predicate<U> return type 
    U u is the parameter 
    s-> s.equals(u) is the lambda expression */ 
} 

の前に最初の<U>は何を意味しますか?この文の最初の<U>は何を意味しますか?

+0

タイプパラメータは、使用する前に宣言する必要があります。最初の ''はそれを宣言し、2番目は '述語'に、パラメータタイプ 'U'はそれを使用します。 'class MyClass 'のように 'T 'を同時に宣言して使用する宣言をタイプするのとは異なります。それに加えて、この特定のケースでは、パラメータ型として 'U'を使用することは無意味です。 Java 8の['Predicate.isEqual(Object)'](https://docs.oracle.com/javase/8/docs/api/java/util/function/)で行われているように、 'Object'も同様に動作します。 Predicate.html#isEqual-java.lang.Object-)... – Holger

答えて

5

これは一般的なタイプのメソッドです。たとえば、それほど複雑なもの:

public static <U> void doSomething(U u) { 
    System.out.println(u); 
} 

あなたはクラスでやるだろうと同じように、あなたはJavaでほしいこと、任意の関数をパラメータすることができます。静的メソッドだけでなく、インスタンスメソッドでも機能します。

doSomething("hello,world"); 
doSomething(42); 

:あなたはこのような上記の関数を呼び出すことができるように、一般的な方法を使用しているときの素晴らしいところがある

<String>doSomething("hello"); 
<Integer>doSomething(42); 

は、その型推論は、Javaで本当によく働く

:あなたはこのような関数を呼び出すことができますどのタイプを使用しているのかをコンパイラーに伝えることなく。

は、それは方法が一般的でありそう呼び出されたときに指定されている任意の指定された型を返すことができることを示しているドキュメントhere.

+0

メソッドのジェネリック型とはどういう意味ですか?ジェネリックな戻り値の型、ジェネリックパラメータは理解されますが、ジェネリック型のメソッドはどういう意味ですか?あなたの返事をありがとう –

+0

これは、あなたが望むように一般的な戻り値の型またはパラメータを指定できることを意味します。上記の私のメソッドを任意のTypeパラメーターで呼び出すことができ、関数の引数は型パラメーターに従って変化します。複数の型の引数に対して複数の型パラメータを設定することもできます。 :) –

2

を参照してください、あなたの方法のジェネリック型Uを宣言します。これは、静的型定義を置き換えるプレースホルダーです。

この汎用関数を使用すると、入力パラメータuが汎用タイプのプレースホルダUであるため、任意のタイプの入力を使用できるようになりました。

この汎用関数の出力は、Predicate<>のインスタンスですが、入力タイプとして使用した同じ汎用タイプUでパラメータ化された別の汎用オブジェクトとして定義されています。

//   | generic type(s) of this method 
//   | 
//   | | type of return value | type of parameter 
//   \___\____________   \_ 
public static <U> Predicate<U> isEqualsTo(U u) { 
    return s -> s.equals(u); 
} 
1

私たちは種類はあなたが合格しているものと同じでなければなりません戻る次にあなたが

public abstract class Predicate<T> 
{ 

    public static <U> Predicate<U> isEqualsTo(U u) { 
     return null; 
    } 
    public static void isNotEqualsTo(Object u) { 

    } 
} 

があるとしましょう。

public class Temp 
{ 

    public static void main(String args[]) 
    { 

     Predicate<String> str=Predicate.isEqualsTo(new String("ewrqe")); 
     Predicate<Integer> integer=Predicate.isEqualsTo(new Integer(200)); 

     Predicate.isNotEqualsTo(new String("ewrqe")); 
     Predicate.isNotEqualsTo(new Integer(200)); 
    } 
} 
関連する問題