-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Callback.java
62 lines (59 loc) · 2.44 KB
/
Callback.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* Copyright (c) 2007 Timothy Wall, All Rights Reserved
*
* The contents of this file is dual-licensed under 2
* alternative Open Source/Free licenses: LGPL 2.1 or later and
* Apache License 2.0. (starting with JNA version 4.0.0).
*
* You can freely decide which license you want to apply to
* the project.
*
* You may obtain a copy of the LGPL License at:
*
* http://www.gnu.org/licenses/licenses.html
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "LGPL2.1".
*
* You may obtain a copy of the Apache License at:
*
* http://www.apache.org/licenses/
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "AL2.0".
*/
package com.sun.jna;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/** All callback definitions must derive from this interface. Any
* derived interfaces must define a single public method (which may not be named
* "hashCode", "equals", or "toString"), or one public method named "callback".
* You are responsible for deregistering your callback (if necessary)
* in its {@link Object#finalize} method. If native code attempts to call
* a callback which has been GC'd, you will likely crash the VM. If
* there is no method to deregister the callback (e.g. <code>atexit</code>
* in the C library), you must ensure that you always keep a live reference
* to the callback object.<p>
* A callback should generally never throw an exception, since it doesn't
* necessarily have an encompassing Java environment to catch it. Any
* exceptions thrown will be passed to the default callback exception
* handler.
*/
public interface Callback {
interface UncaughtExceptionHandler {
/** Method invoked when the given callback throws an uncaught
* exception.<p>
* Any exception thrown by this method will be ignored.
*/
void uncaughtException(Callback c, Throwable e);
}
/** You must use this method name if your callback interface has multiple
public methods. Typically a callback will have only one such
method, in which case any method name may be used, with the exception
of those in {@link #FORBIDDEN_NAMES}.
*/
String METHOD_NAME = "callback";
/** These method names may not be used for a callback method. */
List<String> FORBIDDEN_NAMES = Collections.unmodifiableList(
Arrays.asList("hashCode", "equals", "toString"));
}