Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
37425784
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
37425784
编写于
12月 18, 2012
作者:
D
darcy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8005042: Add Method.isDefault to core reflection
Reviewed-by: alanb, forax, mduigou, jgish, mchung
上级
e6cafbb1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
124 addition
and
0 deletion
+124
-0
src/share/classes/java/lang/reflect/Method.java
src/share/classes/java/lang/reflect/Method.java
+16
-0
test/java/lang/reflect/Method/IsDefaultTest.java
test/java/lang/reflect/Method/IsDefaultTest.java
+108
-0
未找到文件。
src/share/classes/java/lang/reflect/Method.java
浏览文件 @
37425784
...
...
@@ -504,6 +504,22 @@ public final class Method extends Executable {
return
super
.
isSynthetic
();
}
/**
* Returns {@code true} if this method is a default
* method; returns {@code false} otherwise.
*
* A default method is a non-abstract method, that is, a method
* with a body, declared in an interface type.
*
* @return true if and only if this method is a default
* method as defined by the Java Language Specification.
* @since 1.8
*/
public
boolean
isDefault
()
{
return
(
getModifiers
()
&
Modifier
.
ABSTRACT
)
==
0
&&
getDeclaringClass
().
isInterface
();
}
// NOTE that there is no synchronization used here. It is correct
// (though not efficient) to generate more than one MethodAccessor
// for a given Method. However, avoiding synchronization will
...
...
test/java/lang/reflect/Method/IsDefaultTest.java
0 → 100644
浏览文件 @
37425784
/*
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8005042
* @summary Check behavior of Method.isDefault
* @author Joseph D. Darcy
*/
import
java.lang.reflect.*
;
import
java.lang.annotation.*
;
import
java.util.*
;
public
class
IsDefaultTest
{
public
static
void
main
(
String
...
argv
)
throws
Exception
{
int
failures
=
0
;
int
visitationCount
=
0
;
List
<
Class
<?>>
classList
=
new
ArrayList
<>();
classList
.
add
(
TestType1
.
class
);
classList
.
add
(
TestType2
.
class
);
classList
.
add
(
TestType3
.
class
);
classList
.
add
(
TestType4
.
class
);
for
(
Class
<?>
clazz:
classList
)
{
for
(
Method
method:
clazz
.
getDeclaredMethods
())
{
ExpectedIsDefault
expectedIsDefault
=
method
.
getAnnotation
(
ExpectedIsDefault
.
class
);
if
(
expectedIsDefault
!=
null
)
{
visitationCount
++;
boolean
expected
=
expectedIsDefault
.
value
();
boolean
actual
=
method
.
isDefault
();
if
(
actual
!=
expected
)
{
failures
++;
System
.
err
.
printf
(
"ERROR: On %s expected isDefault of ''%s''; got ''%s''.\n"
,
method
.
toString
(),
expected
,
actual
);
}
}
}
}
if
(
visitationCount
==
0
)
{
System
.
err
.
println
(
"Test failed because no methods checked."
);
throw
new
RuntimeException
();
}
if
(
failures
>
0
)
{
System
.
err
.
println
(
"Test failed."
);
throw
new
RuntimeException
();
}
}
}
interface
TestType1
{
@ExpectedIsDefault
(
false
)
void
foo
();
@ExpectedIsDefault
(
true
)
default
void
bar
()
{};
// Default method
}
class
TestType2
{
@ExpectedIsDefault
(
false
)
void
bar
()
{};
}
class
TestType3
implements
TestType1
{
@ExpectedIsDefault
(
false
)
public
void
foo
(){}
@ExpectedIsDefault
(
false
)
@Override
public
void
bar
()
{};
}
@interface
TestType4
{
@ExpectedIsDefault
(
false
)
String
value
();
@ExpectedIsDefault
(
false
)
String
anotherValue
()
default
""
;
}
@Retention
(
RetentionPolicy
.
RUNTIME
)
@interface
ExpectedIsDefault
{
boolean
value
();
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录