mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			123 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
		
		
			
		
	
	
			123 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
|   | class SwitchTests	// JDK 21+.
 | ||
|  | {
 | ||
|  | 	static void echo(Object o) { System.out.println(o); }
 | ||
|  | 
 | ||
|  | 	static {
 | ||
|  | 		interface Yieldable<T>
 | ||
|  | 		{
 | ||
|  | 			T yield();
 | ||
|  | 			default Yieldable<T> default_()	{ return this; }
 | ||
|  | 			default Yieldable<T> when()	{ return this; }
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		// There are 80 bytes (\@80<!) between "::" and "yield;".
 | ||
|  | 		Yieldable<?> y = ((Yieldable<?>) () -> 0)::
 | ||
|  |                                                                                yield;
 | ||
|  | 		((Yieldable<?>) () -> 0).when().default_().yield();
 | ||
|  | 
 | ||
|  | 		enum Letters { OTHER, ALPHA, BETA }
 | ||
|  | 
 | ||
|  | 		Letters when = Letters.OTHER;
 | ||
|  | 
 | ||
|  | 		switch (when) {
 | ||
|  | 		case ALPHA:	{ echo(Letters.ALPHA); break; }
 | ||
|  | 		case BETA:	{ echo(Letters.BETA); break; }
 | ||
|  | 		default:	{ echo(Letters.OTHER); }
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		echo(switch (when) {
 | ||
|  | 			case ALPHA	-> Letters.ALPHA;
 | ||
|  | 			case BETA	-> Letters.BETA;
 | ||
|  | 			default		-> { yield(Letters.OTHER); }
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		String yield = null;
 | ||
|  | 
 | ||
|  | 		switch (yield) {
 | ||
|  | 		case "A": case "B":	{ echo("A or B"); break; }
 | ||
|  | 		case ":":		{ echo("Colon"); break; }
 | ||
|  | 		case String str when !str.equals(""):
 | ||
|  | 					{ echo("<non-empty>"); break; }
 | ||
|  | 		case null: default:	{ echo("Other"); }
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		echo(switch (yield) {
 | ||
|  | 			case "A", "B"		-> { yield("A or B"); }
 | ||
|  | 			case "->"		-> "Arrow";
 | ||
|  | 			case String str when !str.equals("")
 | ||
|  | 						-> "<non-empty>";
 | ||
|  | 			case null, default	-> "Other";
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		Object o = new Object();
 | ||
|  | 
 | ||
|  | 		switch (o) {
 | ||
|  | 		case null:		{ echo("null"); break; }
 | ||
|  | 		case Letters[] ll:	{ echo("SwitchTests$1Letters[]"); break; }
 | ||
|  | 		default:		{ echo("java.lang.Object"); break; }
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 		echo(switch (o) {
 | ||
|  | 			case null		-> "null";
 | ||
|  | 			case Letters[] ll	-> "SwitchTests$1Letters[]";
 | ||
|  | 			default			-> "java.lang.Object";
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		char ch = 'c';
 | ||
|  | 
 | ||
|  | 		switch (ch) {
 | ||
|  | 		case 'a':		{ echo('a'); break; }
 | ||
|  | 		case 'b':		{ echo('b'); break; }
 | ||
|  | 		default:		{ echo('\u0000'); break; }
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 		echo(switch (ch) {
 | ||
|  | 			case 'a'	-> 'a';
 | ||
|  | 			case 'b'	-> 'b';
 | ||
|  | 			default		-> '\u0000';
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		byte b = (byte) 2;
 | ||
|  | 
 | ||
|  | 		switch (b) {
 | ||
|  | 		case ((byte) 0):	{ echo((byte) 0); break; }
 | ||
|  | 		case ((byte) 1):	{ echo((byte) 1); break; }
 | ||
|  | 		default:		{ echo((byte) -1); break; }
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 		echo(switch (b) {
 | ||
|  | 			case ((byte) 0)	-> (byte) 0;
 | ||
|  | 			case ((byte) 1)	-> (byte) 1;
 | ||
|  | 			default		-> (byte) -1;
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		short sh = (short) 2;
 | ||
|  | 
 | ||
|  | 		switch (sh) {
 | ||
|  | 		case ((short) 0):	{ echo((short) 0); break; }
 | ||
|  | 		case ((short) 1):	{ echo((short) 1); break; }
 | ||
|  | 		default:		{ echo((short) -1); break; }
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 		echo(switch (sh) {
 | ||
|  | 			case ((short) 0)	-> (short) 0;
 | ||
|  | 			case ((short) 1)	-> (short) 1;
 | ||
|  | 			default			-> (short) -1;
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		int i = 2;
 | ||
|  | 
 | ||
|  | 		switch (i) {
 | ||
|  | 		case 0b0__00___000:	{ echo(0); break; }
 | ||
|  | 		case 0x000___00__1:	{ echo(1); break; }
 | ||
|  | 		default:		{ echo(-1); break; }
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 		echo(switch (i) {
 | ||
|  | 			case 0_0_0_0_0	-> 0;
 | ||
|  | 			case 1		-> 1;
 | ||
|  | 			default		-> -1;
 | ||
|  | 		});
 | ||
|  | 	}
 | ||
|  | }
 |