)是ª¥t¥t¥quªaacªaac resªQªQªQªSªS。几年。这是p和æåd±±±±±e±±±±±±±€¾Å了¾¾äxver¾
âÅæ©Å¶
è«ÅÅ项»¥ästR
class A {
int id;
public A(int id) {
this.id = id;
}
}
public class Test0 {
public static void main(String[] args) {
A a1 = new A(20);
int i = a1.id;
System.out.println(i);
}
}
ÅRæÅÅÅÅÅ奥奥ÅÅÅÅÅÅÅ奥奥ÅÅÅÅÅÅ ²假达函请勿届
±¼x¾奥的对象是Å¥,Å»¥ät。 p>
飣。 ¶iç英语¶¶¶¶icic极
Å°Éæ±±±±±
c亳i³I±°¶±±±±±±±±和©©©©©©©©© ©�ºET Ū¢æ¥gu. 。 ˆ。 ɪɪ
ÅPartéä假,以±±±±〜 ¾ç¾çKKK£| - | - ÅÅCELOšl和½äjaæšulÅÅÅ和½Å和½ÅiS§ÅDEABED温度 - €±±±和½±ä»¶ ,étaÅÅIst
ÅK了¾实太c.
ä假<μ ÅErieriæjéJéâ¢�º¢�� / p>
婴儿 ±±±。 ɶÅÅÅ®ÅÅÅOOC¾ - ÅÅOUREQUAILÅQUAT ų“¥æ”生函
javaÅH'açélyé±±±±±±±±Åɪ¥ÅäåÅ£»£08¥£»£»£»£»£»£»£»£»£»£»£»£»£»£»£»£»£»£»£»£ »жÅ¥Åæb,ä≥。 º型別抹除法 (type erasure)ã p>
Ådone。 Ul¥¥¥¥¥Çet
v°¥¥³ 。 ž不加工類別的問題äιWIT
ä½äÅ了。 。
是£€ÅÅÅ了tm tm tm tm tm tm tm @¥ and’å¾çμÅPH
ä½Å了»¥çÅÅæ -Å -�I -°°。 »¥ästROÅ°±实量
ÅéÅ了ÅÅÅOUBå$ Å¥äžç&&瀲æ²æ¥Å了。 é¢,ä¾Å€ï¼ ·â·€£|é。
是Å®C.€Å了»¥Åª确实
編žCaÉ€¥Å€¼ ¥³d'¥¥¥££¹它们¹ ÅÅÅÅ了。 ¥¥Å邮票¶-¶-¶-¶-¶ -¶Å½LE¶ €|ÅPeka和圆形的É»é»é工作
çir的±±±±±±to¼pO¼Å®V p>
ÅÅÅÅÅ了ææp ¶¶¶¶¶ ¶..纽纽庆火火火学±±±±±±±±±±ureª ¯ ¯ ¯ ¯ ¯ æ ¯ ¯ ¯ ¯ ¯ ה³ ¯ ¯ הle £ £ ï¼ 是£a2£®£4££°¥¥¥¥æææææææææææ美购用户¥ÅæbICTICATICA ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±und±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ย ÅÅÅÅÅÅÅ奥项¶¶½e½e½¶¶¶
écountoudoud s和½e的ª所有所有>
äst 。
±¼a1æ的€Å·¥ça是Å¥,€¥,以ū ^ setItim()æ Å¥ÅÅ°¥¥¥¥€¥â€ÖTUMAT ®
é -th·ami·omive·艾美奖,äj¶
and | and€€ÅÅ奥«讯¥¾Å¾美和``â€ÆÆÆæ假。 ¾¾¾¾¾¾¾¾¾¾¾¾¾¾似¾¾¾¾¾¾€€€¥¥¥¥¥æ¥æ¥æ¥æ¥æ¥æææææ计æ计»
çädäÅÅÅÅçét® Éż»€»Å以æÅÅ了,® €Å»Å¼¼Bemä¾Å了¼ ä½。 ¬,是繩实
e |。 Å¥ï¼ äsçç簼ŷŠ-nteristeréengtitness()Åta䈺ÅÅÅÅÅÅÅÅ项。
€»¥æ碢¢¢â€â€âa çºäºè§£æ±›奥,Ç。 。 æ æ æ å ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ß ¯ ï ĺ é º çèe ¨èe æè³ ÄÃ, å at ³у ¨ ¸ ¸ tÅ æ ¸ ¸ ¸ ¸ å ally ä grakale on äå截至Qottéçsetitness(),ˆ | - | ±±±±±±us
é。 æ劫可(‶佶佶佶佶佶佶ä½了。
ż ,äÅ»←ästRep -
c c c·â€ÅV¾ä»¥äst
ÇC¾是μ标μ会μx ¥。 at。 âicalææ Ææææјura的,ÅLeçaél®Å项和½¯ªc¥tÅ'一种
Åäɪ€¢¥ªªª¢ÅÅÅÅÅÅ了ÖT id·我和æ和æand和æand和æand and u«ss john了约翰·Å楥¥¥¥¥¢¢³€砂,ar?砂,ar?、,, ark,、,,×砂,ar?砂,ar?、,, ark,、,,×敬用
ä½ -â颁奖了。 Šü≤LETOOVOÅVISALIAMPEN。 Åeasy ofæe haveed了,€ žÅÅÅÅÅÅÅÅ奥¾奥?¾已待定的ÅÅÅ奥奥¶¶¶ ¶â€¶....¶ÅÅÅÅOUB¥ay aw是�èu�u。
Éç¶整数数字èªä¼ éª为ª€ 逢ÅV,€号码ç©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©迈©迈©©万迈万万万万万万万万万,2万万万万万,2万万·万万·万特) ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©迈©迈射空空尝试,Å|Åm.arraylist ÅÅ了不是天生
Ŷäˆ,? 。 >扩展 strong>数字Åçæç°® ÅGu €
vin了和Écra®必须做敬用完成‥Åpere³ÅÅÅÅiqueæç > ÅÅÅÅÅÅÅÅÅÅÅ项ÅAllåAllåäl(ˆ,ÄbT
Ééªäè -‼ 你是¯<1 <1 <1 在Å°°°度上和ªÅ ж  »¢€€¢描述→ŻŻ°ç³VÅÅ了Å了Å了âic? älç⁇¥échistemole ole ole o eentegverçδ。 l ¯ üä üä l ¯ l ¯ä ¯« Ç «ç IJ Volå, e £ ì ± ± ± ± ì³ ¥ integers ¥ integers ¥ integers ¥ integers ¥ integers ¥ integers ¥ integriding ¥ trader ¥ integers ¥ integers ¥ integers ¥ integrate ¥整数¥整数¥francesų±←←©»¶»¶>>>>>
and -¬aÅe了âuÅouåÅÅÅÅÅÅÅÅ项©©©) ˆÅVO了
eggè®至³超级 ésant'dÅicu o icu o o o o vick。 ç'ço²lå,and |Å©©©¢¢ - ©»¶²别除(¢u¢u¢u¢çºObject)对象Å¥¢¥¢¥&¥&¥€€€¾ád°±±±±±±±±±±! Æ®
äst 。
Ééªäè -‼ æaçforpaaffa的¢ºç¶º¶EngCent©t±±±±±±±±ÅègeægeægeititutIttiT。
以<?延伸>æš°°°°°°°°°°°°°°°°°°°°°°°°°°°°? super>æ了〜°°°°°°°°°°°°°°°°©ä»¶Å项ÅITH。 äçãoäção扩展了!!super是Ŷ¶Å,是£°°±·<?扩展对象>æ
ÅÅ了«ˆ,e。 â,Å完成½!Å。
class A {
Object id;
public A(Object id) {
this.id = id;
}
}
public class Test1 {
public static void main(String[] args) {
A a1 = new A(20);
int i = (Integer)a1.id;
System.out.println(i);
A a2 = new A("hello");
String s = (String)a2.id;
System.out.println(s);
}
}
ÅÅť议
class A<T> {
T id;
public A(T id) {
this.id = id;
}
}
public class Test2 {
public static void main(String[] args) {
A<Integer> a1 = new A<Integer>(20);
int i = a1.id;
System.out.println(i);
A<String> a2 = new A<Integer>("hello");
String s = a2.id;
System.out.println(s);
}
}
ÅÅ¥æ面式(类型擦除)
ÅÅ¥æÅ°(类型推理)
class A<T> {
T id;
public A(T id) {
this.id = id;
}
}
public class Test2 {
public static void main(String[] args) {
A<Integer> a1 = new A<>(20);
int i = a1.id;
System.out.println(i);
A<String> a2 = new A<>("hello");
String s = a2.id;
System.out.println(s);
}
}
éç?®ÅÅ¥ç€ÅÅ¥çÅÅ项
class Parent {}
class Child extends Parent {}
class Grandson extends Child {}
class A<T extends Parent> {
T item;
public A(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
public class Test3 {
public static void main(String[] args) {
A<Parent> a1 = new A<>(new Parent());
A<Child> a2 = new A<>(new Child());
A<Grandson> a3 = new A<>(new Grandson());
Parent p = a1.getItem();
Child c = a2.getItem();
Grandson g = a3.getItem();
}
}
class A {
Parent item;
public A(Parent var1) {
this.item = var1;
}
public Parent getItem() {
return this.item;
}
}
public class Test3 {
public static void main(String[] var0) {
A var1 = new A(new Parent());
A var2 = new A(new Child());
A var3 = new A(new Grandson());
Parent var4 = var1.getItem();
Child var5 = (Child)var2.getItem();
Grandson var6 = (Grandson)var3.getItem();
}
}
class Parent {}
class RunnableChild extends Parent implements Runnable, Cloneable{
public void run() {}
public int compareTo() {return 1;}
}
class A<T extends Parent & Runnable & Cloneable> {
T item;
public A(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
public class Test4 {
public static void main(String[] args) {
A<RunnableChild> a2 = new A<>(new RunnableChild());
RunnableChild r1 = a2.getItem();
Runnable r2 = a2.getItem();
Cloneable c = a2.getItem();
}
}
class A {
Parent item;
public A(Parent var1) {
this.item = var1;
}
public Parent getItem() {
return this.item;
}
}
public class Test4 {
public static void main(String[] var0) {
A var1 = new A(new RunnableChild());
RunnableChild var2 = (RunnableChild)var1.getItem();
Runnable var3 = (Runnable)var1.getItem();
Cloneable var4 = (Cloneable)var1.getItem();
}
}
class A<T extends Cloneable & Runnable> {
T item;
public A(T item) {
this.item = item;
}
public T getItem() {
item.run();
return item;
}
}
class A {
Cloneable item;
public A(Cloneable var1) {
this.item = var1;
}
public Cloneable getItem() {
((Runnable)this.item).run();
return this.item;
}
}
ä?Å大坝·raw)é不ÅÅ
class A<T> {
public T id;
public A(T id) {
this.id = id;
}
}
public class Test7 {
public static void main(String[] args) {
A<Integer> a1 = new A<>(20);
A a2 = a1;
Integer i1 = a1.id;
Integer i2 = a2.id;
}
}
# javac Test7.java
Test7.java:13: error: incompatible types: Object cannot be converted to Integer
Integer i2 = a2.id;
^
1 error
æªÅ¢¢¢æ¥ica¥ic
class A<T> {
public T item;
public void setItem(T item) {
this.item = item;
}
}
class B extends A<Integer> {
}
public class Test8 {
public static void main(String[] args) {
B b1 = new B();
b1.setItem(20);
A a1 = b1;
a1.setItem("hello");
System.out.println(b1.item);
}
}
# java Test8
hello
# javac Test8.java
Note: Test8.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
# javac -Xlint:unchecked Test8.java
Test8.java:16: warning: [unchecked] unchecked call to setItem(T) as a member of the raw type A
a1.setItem("hello");
^
where T is a type-variable:
T extends Object declared in class A
1 warning
·¥
class A<T> {
public T item;
public void setItem(T item) {
this.item = item;
}
}
class B extends A<Integer> {
public void setItem(Integer item) {
super.setItem(item);
}
}
public class Test9 {
public static void main(String[] args) {
B b1 = new B();
b1.setItem(20);
A a1 = b1;
a1.setItem("hello");
System.out.println(b1.item);
}
}
# java Test9
Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer
(java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')
at B.setItem(Test9.java:8)
at Test9.main(Test9.java:19)
class B extends A {
public void setItem(Integer var1) {
super.setItem(var1);
}
// $FF: synthetic method
// $FF: bridge method
public void setItem(Object var1) {
this.setItem((Integer)var1);
}
}
›€函数·¥e³æÅÅ¥¥
class A<T> {
T id;
public A(T id) {
this.id = id;
}
public void show() {
System.out.println(id * 3);
}
}
# javac Test11.java
Test11.java:8: error: bad operand types for binary operator '*'
System.out.println(id * 3);
^
first type: T
second type: int
where T is a type-variable:
T extends Object declared in class A
1 error
çor�做Š©³©ç©¶»¶
<免费付给ÅCÅÅÅOUK€Å»❤ 瓩件²ú出行
import java.util.*;
public class Test12 {
public static double avg(List<Number> l) {
double total = 0;
for(Number n:l) {
total += n.doubleValue();
}
return total / l.size();
}
public static void main(String[] args) {
ArrayList<Integer> l = new ArrayList<>();
l.add(20);
l.add(30);
System.out.println(avg(l));
}
}
# javac Test12.java
Test12.java:16: error: incompatible types: ArrayList<Integer> cannot be converted to List<Number>
System.out.println(avg(l));
^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error
楱±ÅÅÅÅÅÅAntantAnt⥥′¢Å¢ÅÅÅÅOVA»❤»❤»❤»❤»。
public class Test13 {
public static double avg(List<? extends Number> l) {
double total = 0;
for(Number n:l) {
total += n.doubleValue();
}
return total / l.size();
}
public static void main(String[] args) {
ArrayList<Integer> l = new ArrayList<>();
l.add(20);
l.add(30);
System.out.println(avg(l));
}
}
# java Test13
25.0
import java.util.*;
public class Test14 {
public static void add(List<? extends Number> l, int item) {
l.add(item);
}
public static void main(String[] args) {
ArrayList<Integer> l = new ArrayList<>();
add(l, 20);
}
}
# javac Test14.java
Test14.java:5: error: incompatible types: int cannot be converted to CAP#1
l.add(item);
^
where CAP#1 is a fresh type-variable:
CAP#1 extends Number from capture of ? extends Number
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error
public HashSet(Collection<? extends E> c)
æiíiíIdi±ÁÅÅÅOB¥æ的的的»
import java.util.*;
public class Test14 {
public static void add(List<? super Integer> l, int item) {
l.add(item);
}
public static void main(String[] args) {
ArrayList<Integer> l = new ArrayList<>();
add(l, 20);
}
}
import java.util.*;
public class Test16 {
public static double avg(List<? super Integer> l) {
double total = 0;
for(Integer n:l) {
total += n;
}
return total / l.size();
}
public static void main(String[] args) {
ArrayList<Integer> l = new ArrayList<>();
l.add(20);
l.add(30);
System.out.println(avg(l));
}
}
# javac Test16.java
Test16.java:6: error: incompatible types: CAP#1 cannot be converted to Integer
for(Integer n:l) {
^
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: Integer from capture of ? super Integer
1 error
çμ