Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a21c46a259a6b23b

Jump to content

Talk:Intersection type

Page contents not supported in other languages.
Add topic
From Wikipedia, the free encyclopedia
Latest comment: 4 years ago by Kavuldra in topic Java really supporting intersection types?

Java really supporting intersection types?

[edit]
LanguageActively developedParadigm(s)StatusFeatures
JavaYes[1] Supported[2]
  • Type refinement
  • Interface composition
  • Subtyping in width

Well, I think Java only supports intersection types to some extent. A language implementing true intersection types enables to insert intersection expressions into type positions. This isn't the case for Java, see this example (JSHELL JDK 15):

jshell> interface i1{}
|  created interface i1

jshell> interface i2{}
|  created interface i2

jshell> i1 & i2 = null
|  Error:
|  cannot find symbol
|    symbol:   variable i1
|  i1 & i2 = null
|  Error:
|  cannot find symbol
|    symbol:   variable i1
|  i1 & i2 = null
|  ^^
|  Error:
|  cannot find symbol
|    symbol:   variable i2
|  i1 & i2 = null
|       ^^

Iconsize (talk) 12:53, 19 March 2021 (UTC)Reply

I don't think the specific syntax a language uses matters to the concepts it supports. In this case you simply didn't write correct Java.
jshell> interface i1 {}
|  created interface i1

jshell> interface i2 {}
|  created interface i2

jshell> interface i3 extends i1, i2 {}
|  created interface i3

jshell> i3 x = null
x ==> null

jshell> i1 a = x
a ==> null

jshell> i2 b = x
b ==> null

jshell> a = b
|  Error:
|  incompatible types: i2 cannot be converted to i1
|  a = b
|      ^
This doesn't mean that Java allows you to do everything intersection types allow you to do, but it does – as you said – allow a restricted form of it.
Kavuldra (talk) 14:07, 22 January 2022 (UTC)Reply

References

  1. "Java Software". Retrieved 2019-08-08.
  2. "IntersectionType (Java SE 12 & JDK 12)". Retrieved 2019-08-01.