Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/sample/lambda/DefaultMethods/MixIn.java
38829 views
1
/*
2
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
*
8
* - Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
*
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* - Neither the name of Oracle nor the names of its
16
* contributors may be used to endorse or promote products derived
17
* from this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
import java.io.IOException;
33
import java.lang.reflect.Field;
34
35
/**
36
* The example illustrates how to use the default method for mixin.
37
* @see BuildType
38
* @see Debuggable
39
*/
40
public class MixIn {
41
42
/**
43
* Implement this interface for a class that must be in debug print
44
*/
45
public interface Debuggable {
46
47
/**
48
* Print the class name and all fields to a string. Uses reflection to
49
* obtain and access fields of this object.
50
*
51
* @return the string formatted like the following: <pre>
52
* State of the: &lt;Class Name&gt;
53
* &lt;member name&gt; : &lt;value&gt;
54
* ...
55
* </pre>
56
*/
57
default String toDebugString() {
58
StringBuilder sb = new StringBuilder();
59
sb.append("State of the: ").append(
60
this.getClass().getSimpleName()).append("\n");
61
for (Class cls = this.getClass();
62
cls != null;
63
cls = cls.getSuperclass()) {
64
for (Field f : cls.getDeclaredFields()) {
65
try {
66
f.setAccessible(true);
67
sb.append(f.getName()).append(" : ").
68
append(f.get(this)).append("\n");
69
} catch (IllegalAccessException e) {
70
}
71
}
72
}
73
return sb.toString();
74
}
75
}
76
77
/**
78
* Sample exception class to demonstrate mixin. This enum inherits the
79
* behavior of the {@link Debuggable}
80
*/
81
public static enum BuildType implements Debuggable {
82
83
BUILD(0, "-build"),
84
PLAN(0, "-plan"),
85
EXCLUDE(1, "-exclude"),
86
TOTAL(2, "-total");
87
88
private final int compareOrder;
89
private final String pathSuffix;
90
91
private BuildType(int compareOrder, String pathSuffix) {
92
this.compareOrder = compareOrder;
93
this.pathSuffix = pathSuffix;
94
}
95
96
public int getCompareOrder() {
97
return compareOrder;
98
}
99
100
public String getPathSuffix() {
101
return pathSuffix;
102
}
103
}
104
105
/**
106
* Illustrate the behavior of the MixClass
107
*
108
* @param args command-line arguments
109
* @throws java.io.IOException internal demo error
110
*/
111
public static void main(final String[] args) throws IOException {
112
System.out.println(BuildType.BUILD.toDebugString());
113
}
114
}
115
116