<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java dynamic是什么,让我们一起了解一下:
dynamic在java中是动态类型的意思,像动态代理就是利用Java的反射技术,在运行时创建一个实现某些给定接口的新类(也称“动态代理类”)及其实例(对象),代理的是接口,不是类,更不是抽象类。
什么是动态类型?
了解什么是动态类型首先我们了解静态类型,在我们平时定义一个int i=1就是静态类型,静态类型就是我们在没有编译的时候已经明确的知道他是一个int类型,动态语言是我们在运行时才会知道的类型。所以我们在编写动态类型的时候是无法使用vs的智能提示,因为编译器也不知道他是一个什么类型。
dynamic i = 1;Console.WriteLine(i.GetType());dynamic str = "1";Console.WriteLine(str.GetType());
使用动态类型的优缺点有哪些?
优点:
1、减少强类型的转换。
2、延迟加载。
3、调用C#类型中不存在的其他语言的类型。
缺点:
1、没有智能提示。
2、需要预先知道接收的数据结构。
案例分析:java中dynamic介绍@dynamic的用法,代码如下。
@interface Person : NSObject{undefined// must provide a ivar for our setter and getterNSString *_name;}@property (copy) NSString *name;@end@implementation Person// @dynamic tells compiler don't generate setter and getter automatically@dynamic name;// We provide setter and getter here- (void) setName:(NSString *)name{undefinedif (_name != name) {undefined[_name release];_name = [name copy];}}- (NSString *) name{undefinedreturn _name;}@end // Personint main(int argc, const charchar * argv[]){undefinedNSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];Person *a = [[Person alloc] init];a.name = @"Hello"; // Ok, use our settera.name = @"Hello, world";NSLog(@"%@", a.name); // Ok, use our getter[a release];[pool drain];return 0;} // main