Giriş
Java 10 JEP 286: Local-Variable Type Inference ile geliyor. Java dili C++ ve C#'taki bu özelliği nihayet yakalayacak.
var Anahtar Bir Kelime Değil
Açıklaması şöyle.
Örnek
var isimli bir değişken tanımlanabilir. Şöyle yaparız.
Örnek
Şu kod derlenmez.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Generic tipler kullanılabilir. Şöyle yaparız. Eğer her iki tarafta da tip verilmezse en generic tip seçilir.
Açıklaması şöyle. Yani var Anonymous Class muamelesi görebilir.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız
Açıklaması şöyle.
Java 10 JEP 286: Local-Variable Type Inference ile geliyor. Java dili C++ ve C#'taki bu özelliği nihayet yakalayacak.
var Anahtar Bir Kelime Değil
Açıklaması şöyle.
Açıklaması şöyle. Sadece derleme esnasında kullanılır.not a keyword; instead it is a reserved type name.
As a 100 percent compile feature, it doesn't affect bytecode, runtime, or performance. Mainly, the compiler will inspect the right-hand side and infer the concrete type. It looks at the right-hand side of the declaration, and if there is an initializer, then it simply uses that type to replacevar.
Örnek
var isimli bir değişken tanımlanabilir. Şöyle yaparız.
public class Java10 {
var var = 42; // <-- this works
}
var null ile İlklenmezÖrnek
Şu kod derlenmez.
var x = new HashMap<> (); // legal
var y = new HashMap<String, Integer>(); // legal
var z = "foo"; // legal
System.out.println(z);
var umm = null; // xx wrong xx //
var foo; // xx wrong usage without initializer xx //
var var = 5; // legal
Local Type Inference yerel değişkenler için kullanılır.Örnek
Şöyle yaparız.
var foo = "boo";
ÖrnekŞöyle yaparız.
public class TestClass {
public static void main(String [] args){
var list = new ArrayList<>();
list.add("1");
System.out.println(list.get(0)); // 1
}
}
Şu kod yerel değişken olmadığı için derlenmez.public class TestClass {
public var list = new ArrayList<>();
public static void main(String [] args){
...
}
}
ÖrnekGeneric tipler kullanılabilir. Şöyle yaparız. Eğer her iki tarafta da tip verilmezse en generic tip seçilir.
var list = new ArrayList<>(); // Infers ArrayList<Object>
var list = new ArrayList<>(List.of(1, 2, 3)); // Infers ArrayList<Integer>
Non-Denotable TypeAçıklaması şöyle. Yani var Anonymous Class muamelesi görebilir.
ÖrnekCapture variables, and types with nested capture variables, are projected to supertypes that do not mention capture variables. This mapping replaces capture variables with their upper bounds and replaces type arguments mentioning capture variables with bounded wildcards (and then recurs). This preserves the traditionally limited scope of capture variables, which are only considered within a single statement.
Şöyle yaparız.
var d = new Object() {}; // d has the type of the anonymous class
ÖrnekŞöyle yaparız.
var x = new Object() {
int i = 10;
};
System.out.println(x.i); // works; `x` has the non-denotable type of the annonymous class
Şu kod ise delenmez.List<String> l1 = new ArrayList<>();
l1.add("Hello");
List<?> l2 = l1;
var l3 = l2; // type of 'l3' is List<?>, but not the same '?' as 'l2'
l3.add(l2.get(0)); // error
ÖrnekŞöyle yaparız
var object = new Object() {
public void a() {}
};
object.a();
lambda ile kullanılamazAçıklaması şöyle.
Şu kod derlenmez.The inference process, substantially, just gives the variable the type of its initializer expression. Some subtleties:
- The initializer has no target type (because we haven't inferred it yet). Poly expressions that require such a type, like lambdas, method references, and array initializers, will trigger an error.
var predicateVar = apple -> apple.getColor().equals("#101094");
Local-Variable Syntax for Lambda Parametersvar lambda parametresi olarak kullanılabilir.
Örnek
Şöyle yaparız. Böylece lambda değişkenlerde anotasyon kullanılabilir.
ÖrnekPrediciate<String> predicate = (@NotNull var a) -> true;
Şöyle yaparız
(@NotNull var str) -> "$" + str
Hiç yorum yok:
Yorum Gönder