`
txidol
  • 浏览: 53592 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【不合法的访问】小心其他包中的非公共类型

 
阅读更多

原则:访问位于其他包中的非公共类型的成员是不合法的,即便该成员被声明为某公共类型的公共成员。

 

案列1:

 

package coner_case;

import java.util.*;
import java.lang.reflect.*;

public class Reflector {
	public static void main(String[] args) throws Exception{
		Set<String> s = new HashSet<String>();
		s.add("foo");
		Iterator<String> it  = s.iterator();
		
		//Method m = it.getClass().getMethod("hasNext");
		//这种惯用技法,有问题,不推荐使用  
		//it.getClass()得到是私有的嵌套类KeyIterator
				
		//替换注释部分,使用注释部分,运行会报该类型不是公共类型
		Method m = Iterator.class.getMethod("hasNext");
		
		System.out.println(m.invoke(it));
	}
}


案列2:

 

 

package library;
public class Api{
	static class PackagePrivate{}
	public static PackagePrivate member = new PackagePrivate();
}

package client;
import library.Api;
class Client{
	public static void main(String[] args) {
		//注释部分无法编译噢   调用的类型是位于其他包中的非公共类型
		//System.out.println(Api.member.hashCode());
		System.out.println(((Object)Api.member).hashCode());
	}
}


 

分享到:
评论

相关推荐

    四个公共的类放在四个包中为何在提示出错?

    如果一个公共类(public class)被错误地放置在一个不希望它被访问的包中,可能会导致访问权限问题。检查类的访问修饰符是否与包的结构匹配。 3. **包结构不正确**:在Eclipse中,项目的源代码目录结构需要与包结构...

    访问权限及继承

    访问权限在面向对象编程中主要指定了类、接口、方法和变量可被其他代码访问的程度。通常,有四种基本的访问修饰符: 1. **private**:这是最严格的访问级别,仅允许在定义它的同一类内部访问。使用private修饰的...

    数据库访问公共类

    数据库访问公共类

    java成员变量和方法的public等访问限定符的访问权限.doc

    private 访问权限是最严格的访问权限,表示该成员变量或方法只能被同一个类访问,不能被其他类访问。例如,在上面的例子中,类 P 的私有成员变量 data 不能被其他类访问,包括子类 Q。 protected 访问权限 ...

    关于Java访问权限表的一个总结

    - static字段(静态变量)的访问规则与非static字段相同,但可以被类名直接访问,不受访问修饰符的限制。 6. **访问权限与继承的关系**: - 子类可以访问或重写父类的protected和public成员,但不能访问父类的包...

    java访问权限修饰符[参考].pdf

    - **public**:无论成员变量还是方法,只要使用`public`修饰,那么它们就可以在任何地方被访问,包括其他包中的类。 - **protected**:被`protected`修饰的成员变量和方法只能在同一个包内的类或者不同包中的子类中...

    java的访问修饰符的范围说明

    但是,非子类的其他类无法访问这些成员。这种权限常用于需要子类访问或重写(Override)父类方法,而阻止其他类随意访问的场景。 4. 公共权限(public): public修饰符提供了最宽松的访问控制,它允许任何其他类...

    【独家高薪面试题库】与【实战配套练习演练】6.静态变量访问修饰符1

    受保护的访问修饰符允许子类和其他包中的类访问。这在多层继承结构中很有用,因为超类可能希望子类能够访问某些特定的成员,但又不希望这些成员对所有类开放。 4. **字节数据类型(byte)**: `byte`数据类型占用...

    12_访问控制符_1 视频

    私有成员变量和方法使外部代码不能直接访问,需要通过公共的getter和setter方法进行访问,增强了代码的安全性和维护性。 2. **继承与覆盖**:在继承关系中,子类可以访问父类的受保护成员,但不能访问父类的私有...

    asp.net(c#)不可访问,因为它受保护级别限制

    这个问题通常出现在尝试访问非公共(non-public)成员时,比如在一个类中定义了一个非公共的属性或方法,然后试图从另一个类中访问它。 #### 错误示例分析 在提供的示例中,作者提到了在编写一个复数类(`complex`...

    Java入门笔记4_访问控制和包

    2. **`protected`**:表示受保护,可以在同一类内、同一包内以及不同包内的子类中被访问,但不能在不同包的非子类中访问。 3. **`default`**:也称为包访问权限,如果没有指定任何访问修饰符,则默认为`default`。...

    Java4Android 27_包和访问权限(三)

    如果你想在不同包中访问类,你需要考虑访问权限: 1. 如果类是 `public` 的,其他包可以通过完全限定名引用它。 2. 对于非 `public` 类,只有在同一包内或者对于 `protected` 类,其子类可以访问。 3. `default` ...

    Java修饰符使用整理(含实例)

    protected 访问修饰符是中等级的访问修饰符,同一个包中的类可以访问 protected 修饰的成员变量和方法,同时子类也可以访问 protected 修饰的成员变量和方法。protected 修饰符通常用于保护继承关系中的成员变量和...

    2019年继续教育非公共课时真题答案.doc

    2019年继续教育非公共课时真题答案.doc

    2019年继续教育非公共课时真题答案.docx

    2019年继续教育非公共课时真题答案.docx

    eclipse中对包的访问

    3. **访问控制的调整**:如果你不希望其他包的类访问这些公共类,你可以考虑降低它们的访问级别,例如使用default或protected。这样,只有在同一包或子包内的类才能访问它们。 4. **Eclipse的项目设置**:检查...

    基于Java的实例源码-访问权限控制源代码.zip

    如果想让类能在其他包中被使用,需要声明为`public`。 - **方法和变量的访问权限**:合理设置方法和变量的访问权限,可以确保数据的安全。例如,敏感数据通常设为`private`,提供公共的getter和setter方法来读写。 ...

    第6章 包、访问控制和接口1

    `import`语句用于引入其他包中的类,以便在当前源文件中使用。有两种引入方式:一是直接指定要引入的特定类,如`import src.Point;`;二是使用通配符`*`,如`import src.*;`,这将引入src包下的所有类。但需要注意,...

    Java访问权限控制源代码.zip

    4. **公共(Public)**:public是最宽松的访问权限,被其修饰的成员可以在任何地方被访问,不受包的限制。 接下来,我们来看看这些访问修饰符在类、接口、字段和方法上的应用: - **类和接口**:只有public类和...

Global site tag (gtag.js) - Google Analytics