1 /*
2 * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26 package java.dyn;
27
28 /**
29 * Syntactic marker interface to request javac to emit an {@code invokedynamic} instruction.
30 * A language compiler might use this interface to express invokedynamic instructions as follows:
31 * <blockquote><pre>
32 * Dynamic.greet("hello world", 123);
33 * // previous line generates invokedynamic "greet" "(Ljava/lang/String;I)Ljava/lang/Object;"
34 * Dynamic.<void>println(123);
35 * // previous line generates invokedynamic "println" "(I)V"
36 * Dynamic.#"long:strange:name"();
37 * // previous line generates invokedynamic "long:strange:name" "()Ljava/lang/Object;"
38 * </pre></blockquote>
39 * <p>
40 * This type has no particular meaning as a class or interface supertype, and need never be implemented by any class.
41 * Logically, it denotes a dynamically typed reference to any object.
42 * As such it may be viewed as logically containing all methods on any of those types.
43 * <p>
44 * This type may be used as a marker interface for arguments to method handles, in order
45 * to distinguish the static type {@code Object} from a dynamically typed reference.
46 * @author John Rose, JSR 292 EG
47 */
48 public interface Dynamic {
49 // no methods
50 }